Thank you for your interest in contributing to {{PROJECT_NAME}}! This guide will help you get started with our development workflow and contribution standards.
We use Conventional Commits for automated versioning and changelog generation.
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
- feat: New features (triggers minor version bump)
- fix: Bug fixes (triggers patch version bump)
- docs: Documentation changes
- refactor: Code refactoring without functional changes
- test: Adding or updating tests
- chore: Maintenance tasks, dependency updates
- ci: Changes to CI/CD configuration
- perf: Performance improvements
- style: Code style changes (formatting, etc.)
# Good commit messages
feat: add support for new feature X
fix: resolve issue with Y functionality
docs: update installation guide
refactor: simplify core logic
test: add tests for edge cases
chore: update dependencies
# Breaking changes (use sparingly until v1.0.0)
feat!: change API interface
fix!: remove deprecated methods
# With scope
feat(core): add new validation logic
fix(api): resolve timeout handling
docs(readme): update usage examplesFor guided commit messages, use commitizen:
# Install dependencies first
npm install
# Use commitizen for guided commits
npm run commit
# or
npx czThis will prompt you through creating a properly formatted commit message.
git clone https://github.com/YOUR_USERNAME/{{PROJECT_NAME}}.git
cd {{PROJECT_NAME}}# Install Python dependencies
pip install -e .
# Install Node.js dependencies for semantic-release
npm installgit checkout -b feat/your-feature-name
# or
git checkout -b fix/your-bug-fix- Write code following existing patterns
- Add tests for new functionality
- Update documentation as needed
- Follow Python best practices (PEP 8)
# Run all tests
python -m unittest discover tests
# Test basic import
python -c "import {{PACKAGE_NAME}}; print('Package imports successfully')"# Use commitizen for guided commits
npm run commit
# Or commit manually with conventional format
git commit -m "feat: add your feature description"git push origin feat/your-feature-nameThen create a pull request on GitHub.
Use conventional commit format for PR titles:
feat: add new functionalityfix: resolve specific issuedocs: update documentation
Include in your PR description:
- What: Brief description of changes
- Why: Reason for the changes
- How: Implementation approach (if complex)
- Testing: How you tested the changes
- Breaking Changes: Any breaking changes (if applicable)
- Code follows existing style and patterns
- Tests added for new functionality
- Documentation updated (if needed)
- Commit messages follow conventional format
- All tests pass
- No breaking changes (unless intentional and documented)
- Follow PEP 8 style guidelines
- Use type hints where appropriate
- Write docstrings for public functions and classes
- Keep functions focused and small
- Use meaningful variable and function names
- Update relevant documentation for changes
- Use clear, concise language
- Include code examples where helpful
- Keep README.md up to date
This template uses Wobble as the standard testing framework for CrackingShells organization.
Installation:
# Install Wobble from repository
pip install git+https://github.com/CrackingShells/Wobble.git
# For development/editable installation
git clone https://github.com/CrackingShells/Wobble.git
cd Wobble
pip install -e .Add to pyproject.toml dependencies:
[project]
dependencies = [
"wobble @ git+https://github.com/CrackingShells/Wobble.git",
# ... other dependencies
]# Run all tests
wobble
# Run specific test categories
wobble --category regression
wobble --category integration
wobble --category development
# File output for CI/CD
wobble --log-file test_results.json --log-file-format json
# Detailed output with file logging
wobble --log-file detailed_results.json --log-verbosity 3
# Exclude slow tests during development
wobble --exclude-slow --category developmentFor backward compatibility during migration:
# Legacy unittest (deprecated)
python -m unittest discover tests
# Run specific test file
python -m unittest tests.test_basic
# Run with verbose output
python -m unittest discover tests -vTest Structure Requirements:
- Use hierarchical directory structure:
tests/regression/,tests/integration/,tests/development/ - Apply required categorization decorators from wobble
- Follow
test_*.pynaming convention - Use unittest framework as base (wobble extends unittest)
Test Categorization:
from wobble.decorators import regression_test, integration_test, development_test
@regression_test
def test_existing_functionality(self):
"""Test that existing features continue to work"""
pass
@integration_test(scope="component")
def test_component_integration(self):
"""Test component interactions"""
pass
@development_test(phase=1)
def test_new_feature_development(self):
"""Test new features under development"""
passBest Practices:
- Add tests for new features with appropriate categorization
- Test edge cases and error conditions
- Use descriptive test names that explain the scenario
- Follow existing test patterns in the repository
- Include file output testing for CI/CD integration
Releases are fully automated using semantic-release:
- Commits are analyzed for conventional commit format
- Version is calculated based on commit types
- Changelog is generated from commit messages
- Version files are updated (pyproject.toml, CHANGELOG.md)
- Changes are committed back to repository using GitHub App
- GitHub release is created with release notes and tags
feat:commits → Minor version (0.1.0 → 0.2.0)fix:commits → Patch version (0.1.0 → 0.1.1)feat!:orBREAKING CHANGE:→ Major version (0.1.0 → 1.0.0)- Other types → No release
- Issues: Report bugs or request features via GitHub Issues
- Discussions: Ask questions in GitHub Discussions
- Documentation: Check existing documentation for guidance
- Code: Look at existing code for patterns and examples
- Be respectful and inclusive
- Focus on constructive feedback
- Help others learn and grow
- Follow GitHub's community guidelines
Thank you for contributing to {{PROJECT_NAME}}! 🚀