Thank you for your interest in contributing to TaskRepo! This document provides guidelines for contributing to the project.
- Fork and clone the repository
git clone https://github.com/yourusername/TaskRepo.git
cd TaskRepo- Install UV (if not already installed)
curl -LsSf https://astral.sh/uv/install.sh | sh- Install dependencies
uv sync --extra dev- Run tests to verify setup
uv run pytest tests/ -vWhen releasing a new version, the Homebrew formula must be updated in the homebrew-formulas repository.
cd ../homebrew-formulas
just release taskrepo # Full workflow: update → test → commit → pushThis automatically:
- Fetches the latest version from PyPI
- Downloads and calculates SHA256 checksum
- Updates the formula file
- Tests the installation
- Commits with standardized message
- Pushes to remote
If just is not available, you can update the formula manually:
VERSION=X.Y.Z # Replace with new version
curl "https://pypi.org/pypi/taskrepo/$VERSION/json" | \
jq -r '.urls[] | select(.packagetype=="sdist") | "URL: \(.url)\nSHA256: \(.digests.sha256)"'Navigate to the homebrew-formulas repository and edit the formula:
cd ../homebrew-formulas # Use relative path from TaskRepo directoryEdit Formula/taskrepo.rb:
- Update the
urlline with the new URL - Update the
sha256line with the new hash
brew install --build-from-source ./Formula/taskrepo.rb
brew test taskrepo
tsk --version # Verify correct version
brew uninstall taskrepobrew audit --strict --online taskrepogit add Formula/taskrepo.rb
git commit -m "taskrepo: update to version $VERSION"
git pushbrew install henriqueslab/formulas/taskrepo
tsk --versionNote: The automated workflow using just is preferred for consistency and efficiency. See the homebrew-formulas repository for additional utility commands like just list, just check-updates, and just sha256
- Create a new branch for your feature or bugfix:
git checkout -b feature/your-feature-name- Make your changes and ensure they follow the code style:
# Format code
uv run ruff format .
# Check for linting issues
uv run ruff check .
# Run type checking
uv run mypy src/taskrepo- Add tests for your changes:
# Run tests
uv run pytest tests/ -v
# Run tests with coverage
uv run pytest tests/ --cov=src/taskrepo --cov-report=term-missing-
Update documentation if necessary (README.md, docstrings, etc.)
-
Commit your changes with a descriptive message:
git add .
git commit -m "Add feature: your feature description"TaskRepo follows these coding standards:
- Python: PEP 8 style guide
- Formatter: Ruff (configured in pyproject.toml)
- Linter: Ruff with strict rules
- Type hints: Use type hints for all function signatures
- Docstrings: Google-style docstrings for all public functions
- Write unit tests for all new functionality
- Aim for high test coverage (>80% for new code)
- Use descriptive test names that explain what is being tested
- Follow the Arrange-Act-Assert pattern in tests
- Use pytest fixtures for common test setup
Write clear, concise commit messages:
- Use present tense ("Add feature" not "Added feature")
- Use imperative mood ("Move cursor to..." not "Moves cursor to...")
- Limit first line to 72 characters
- Reference issues and pull requests where applicable
Examples:
Add support for task dependencies
Fix memory leak in task loading
Update documentation for sync command
Refactor repository discovery logic
- Push your branch to your fork:
git push origin feature/your-feature-name-
Create a Pull Request (PR) on GitHub:
- Provide a clear description of the changes
- Reference any related issues
- Ensure all CI checks pass
- Request review from maintainers
-
Address review feedback:
- Make requested changes
- Push updates to your branch
- Respond to reviewer comments
taskrepo/
├── src/taskrepo/ # Main package
│ ├── cli/ # CLI commands and framework
│ │ ├── main.py # Main CLI entry point
│ │ └── commands/ # Individual command implementations
│ ├── core/ # Core business logic
│ │ ├── task.py # Task model
│ │ ├── repository.py # Repository management
│ │ └── config.py # Configuration handling
│ ├── tui/ # Terminal UI components
│ │ └── prompts.py # Interactive prompts
│ └── utils/ # Utility functions
├── tests/ # Test suite
│ ├── unit/ # Unit tests
│ └── integration/ # Integration tests
└── docs/ # Documentation
We welcome contributions in these areas:
- Task templates
- Recurrence support
- Time tracking
- Advanced search and filtering
- GitHub API integration
- Web UI for visualization
- Shell completion scripts
- Performance optimizations
- Better error messages
- More comprehensive tests
- Documentation improvements
- Accessibility enhancements
- Check the Issues page for open bugs
- Reproduce and fix reported issues
- Add tests to prevent regressions
All submissions require review:
- Maintainers will review your PR within a few days
- Feedback will be provided via PR comments
- Address feedback and push updates
- Once approved, a maintainer will merge your PR
If you have questions about contributing:
- Open an issue for discussion
- Reach out to maintainers
- Check existing issues and PRs for similar questions
By contributing to TaskRepo, you agree that your contributions will be licensed under the MIT License.
Thank you for contributing to TaskRepo! 🎉