Skip to main content

Find truly available GitHub issues by filtering out those with linked PRs

Project description

๐Ÿ” Gitish

Find truly available open source issues - Stop wasting time on issues someone is already working on

License: MIT Python 3.8+ No Dependencies CI codecov

๐ŸŽฏ The Problem

You find an interesting GitHub issue, spend time understanding it, start working on it... only to discover someone already submitted a PR. Time wasted.

โœจ The Solution

This tool checks for linked pull requests and shows you only issues that are truly available to work on.

What Makes This Unique?

  • โœ… Filters by Linked PRs - No other tool does this
  • โœ… Beautiful Architecture - Clean, organized, maintainable
  • โœ… Multi-Repository - Works with any GitHub repository
  • โœ… Zero Dependencies - Uses only Python stdlib
  • โœ… Smart Caching - Respects GitHub rate limits
  • โœ… Professional CLI - Well-structured commands

๐Ÿš€ Quick Start

Installation

From PyPI (Recommended)

pip install gitish

From Source

# Clone the repository
git clone https://github.com/rifat-simoom/gitish.git
cd gitish

# Install
pip install -e .

Development Installation

# Clone and install with dev dependencies
git clone https://github.com/rifat-simoom/gitish.git
cd gitish
pip install -e ".[dev]"

Requirements

Python 3.8+ - That's it! No other dependencies.

๐Ÿ“– Usage

List Repositories

gitish list

# Output:
# ๐Ÿ“‹ Configured Repositories:
#   โœ“ symfony     symfony/symfony
#     laravel     laravel/framework
#     react       facebook/react
#     ...17 repos total

Find Available Issues

# Find available issues in Symfony
gitish available symfony

# Find bugs in Laravel
gitish available laravel --label=bug

# Find good first issues in React
gitish available react --label="good first issue"

# Use any repository (owner/repo format)
gitish available microsoft/TypeScript --label=bug

View Issue Details

# See full issue with comments and linked PRs
gitish show 12345 symfony

๐ŸŽจ Example Output

๐Ÿ” Fetching issues from symfony/symfony...
   Filtering by label: DX

โœจ Found 2 available issues

  #62497  [Scheduler] [DX] Schedule's with() method is prone to w...
         Labels: DX, Scheduler
         Comments: 1  Updated: 2026-04-23

  #40794  [DX] Static vs. runtime env vars
         Labels: DX, Help wanted, Keep open
         Comments: 47  Updated: 2025-05-09

๐Ÿ’ก Tips:
   โ€ข View details: gitish show <number> symfony
   โ€ข Filter: --label="bug" or --label="good first issue"
   โ€ข More results: --limit=50

๐Ÿ—๏ธ Project Structure

gitish/
โ”œโ”€โ”€ gitish/                   # Main package
โ”‚   โ”œโ”€โ”€ __init__.py           # Package initialization
โ”‚   โ”œโ”€โ”€ config.py             # Configuration and settings
โ”‚   โ”œโ”€โ”€ cli.py                # CLI entry point
โ”‚   โ”œโ”€โ”€ commands/             # Command implementations
โ”‚   โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”‚   โ”œโ”€โ”€ list_repos.py     # List repositories
โ”‚   โ”‚   โ”œโ”€โ”€ available_issues.py  # Find available issues
โ”‚   โ”‚   โ””โ”€โ”€ show_issue.py     # Show issue details
โ”‚   โ”œโ”€โ”€ services/             # Business logic
โ”‚   โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”‚   โ””โ”€โ”€ github_api.py     # GitHub API client
โ”‚   โ””โ”€โ”€ utils/                # Utilities
โ”‚       โ”œโ”€โ”€ __init__.py
โ”‚       โ”œโ”€โ”€ repository.py     # Repository resolution
โ”‚       โ””โ”€โ”€ formatters.py     # Output formatting
โ”œโ”€โ”€ tests/                    # Test suite
โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”œโ”€โ”€ conftest.py           # Pytest fixtures
โ”‚   โ”œโ”€โ”€ test_github_api.py    # API tests
โ”‚   โ”œโ”€โ”€ test_repository.py    # Repository tests
โ”‚   โ”œโ”€โ”€ test_formatters.py    # Formatter tests
โ”‚   โ””โ”€โ”€ test_cli.py           # CLI tests
โ”œโ”€โ”€ .github/
โ”‚   โ””โ”€โ”€ workflows/            # GitHub Actions
โ”‚       โ”œโ”€โ”€ ci.yml            # CI pipeline
โ”‚       โ”œโ”€โ”€ publish.yml       # PyPI publishing
โ”‚       โ””โ”€โ”€ release.yml       # Release automation
โ”œโ”€โ”€ pyproject.toml            # Modern Python packaging
โ”œโ”€โ”€ setup.py                  # Setup script
โ”œโ”€โ”€ Makefile                  # Development commands
โ”œโ”€โ”€ README.md                 # This file
โ”œโ”€โ”€ LICENSE                   # MIT License
โ””โ”€โ”€ CONTRIBUTING.md           # Contribution guidelines

Architecture Highlights

  • Clean Separation - Commands, services, and utilities are separate
  • Service Layer - GitHub API interactions isolated in service
  • Command Pattern - Each command is a separate class
  • Utilities - Reusable formatters and helpers
  • No Dependencies - Uses only Python standard library

โš™๏ธ Configuration

Built-in Repositories

Pre-configured with 17 popular projects:

PHP: Symfony, Laravel, PHPUnit, Doctrine, Guzzle
JavaScript: React, Vue, Angular, Node.js, TypeScript
Python: Django, Flask, pytest
Other: Rust, Go, Rails, .NET

Add Custom Repositories

Edit gitish/config.py:

REPOSITORIES = {
    'myproject': 'username/repository',
    # ... existing repos
}

Or use owner/repo format directly:

gitish available username/repository

GitHub Token (Recommended)

Increase rate limit from 60 to 5,000 requests/hour:

# Get token at: https://github.com/settings/tokens
export GITHUB_TOKEN="your_github_token_here"

# Add to ~/.bashrc or ~/.zshrc to persist
echo 'export GITHUB_TOKEN="your_github_token_here"' >> ~/.bashrc

Note: Token only needs read access (no scopes required)

๐ŸŽ“ How It Works

  1. Fetches Issues - Uses GitHub API to get open issues
  2. Checks Timeline - Examines timeline for cross-referenced PRs
  3. Filters Results - Shows only issues without linked PRs
  4. Caches Data - Stores in ~/.gitish/cache/ for 5 minutes

Why This Matters

  • Saves Time - No manual checking of each issue
  • Avoids Conflicts - Don't work on issues with existing PRs
  • Better Success - Focus on truly available issues
  • Clear Visibility - See PR status at a glance

๐Ÿค Contributing

Contributions welcome! This project has a clean architecture that's easy to extend.

Development Setup

# Clone the repository
git clone https://github.com/rifat-simoom/gitish.git
cd gitish

# Install in development mode with dev dependencies
pip install -e ".[dev]"

# Or use make
make install-dev

Running Tests

# Run all tests with coverage
make test

# Or use pytest directly
pytest --cov=gitish --cov-report=term-missing

Code Quality

# Format code
make format

# Run linters
make lint

# Or run individually
black gitish tests
isort gitish tests
flake8 gitish tests
mypy gitish

Pre-commit Hooks (Optional)

# Install pre-commit
pip install pre-commit

# Set up git hooks
pre-commit install

# Run manually
pre-commit run --all-files

Development Commands

make help          # Show all available commands
make install       # Install package
make install-dev   # Install with dev dependencies
make test          # Run tests with coverage
make lint          # Run linters
make format        # Format code
make clean         # Remove build artifacts
make build         # Build distribution packages

Code Style

  • Follow PEP 8
  • Use type hints where possible
  • Add docstrings to all functions
  • Keep functions small and focused
  • Write tests for new features
  • Format with Black (line length 100)
  • Sort imports with isort

See CONTRIBUTING.md for detailed guidelines.

๐Ÿ“‹ Roadmap

Current (v1.0)

  • โœ… Multi-repository support
  • โœ… Linked PR detection
  • โœ… Beautiful CLI interface
  • โœ… Smart caching
  • โœ… GitHub token support
  • โœ… Clean architecture

Planned (v2.0)

  • Config file support (~/.gitish.conf)
  • Colorized output with rich/colorama
  • Progress indicators
  • Watch for new issues
  • Export to JSON/CSV
  • Shell completion (bash/zsh)

Future Ideas

  • Web dashboard
  • Browser extension
  • IDE plugins
  • Team collaboration features
  • Contribution analytics

๐ŸŽฏ Use Cases

For Contributors

  • Quickly find available issues across multiple projects
  • Avoid wasted effort on taken issues
  • Discover good first issues
  • Track multiple repositories easily

For Maintainers

  • Help contributors find available work
  • Reduce duplicate PRs
  • Improve contributor experience
  • Share with your community

For Teams

  • Coordinate open source contributions
  • Find issues matching team expertise
  • Track contribution opportunities
  • Encourage OSS participation

๐Ÿ“Š Comparison

Feature This Tool GitHub CLI GitKraken Others
Filters by linked PRs โœ… โŒ โŒ โŒ
Clean architecture โœ… โœ… โœ… Varies
No dependencies โœ… โŒ โŒ โŒ
Multi-repo โœ… โœ… โœ… โœ…
Open source โœ… โœ… โŒ Varies

๐Ÿ› Troubleshooting

Rate Limit Errors

Problem: 403 rate limit exceeded

Solution: Add GitHub token (see Configuration section)

No Issues Found

Possible reasons:

  • All issues have linked PRs (try different label)
  • Repository has no open issues
  • Network/API issues

Solution: Try different filters or repositories

Import Errors

Problem: ModuleNotFoundError

Solution:

# Install the package
pip install -e .

# Or run from project root
python -m gitish.cli list

๐Ÿ“ License

MIT License - see LICENSE for details.

๐Ÿ™ Acknowledgments

  • Built with Python standard library
  • Powered by GitHub API
  • Inspired by the need to contribute more effectively to open source

๐Ÿ“ž Support

๐ŸŒŸ Why This Project?

The Story

While trying to contribute to Symfony, I kept finding "good first issues" that already had PRs in progress. After wasting hours on this, I built a tool to solve it. Now you can find truly available issues in seconds.

The Impact

  • Saves Hours - No more manual checking
  • Helps Thousands - Any contributor can use this
  • Unique Solution - No other tool filters by linked PRs
  • Beautiful Code - Clean architecture, easy to maintain

Made with โค๏ธ for the open source community

Stop wasting time on taken issues. Find truly available work in seconds.

Beautiful architecture. Zero dependencies. Just works. ๐ŸŽ‰

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gitish-1.0.0.tar.gz (27.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

gitish-1.0.0-py3-none-any.whl (18.1 kB view details)

Uploaded Python 3

File details

Details for the file gitish-1.0.0.tar.gz.

File metadata

  • Download URL: gitish-1.0.0.tar.gz
  • Upload date:
  • Size: 27.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.20

File hashes

Hashes for gitish-1.0.0.tar.gz
Algorithm Hash digest
SHA256 e2876da678728f7c17c918e7e9af93c68519ee5149079228d4a91e6fa1e7befd
MD5 9bc69ec5410f61f01ea7d6fdf0ae2d0a
BLAKE2b-256 6c84eac54b67f83b3cdfe68bd3d2a47d0c206c9f3ace6f3aa58a98fda478b68c

See more details on using hashes here.

File details

Details for the file gitish-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: gitish-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 18.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.20

File hashes

Hashes for gitish-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 05da535f4ec89d776abed0af2e00575e4771d63f198af12ca5ae417ba8fd2c00
MD5 dda8b59e7a69c5960ec7c72a9c3753e8
BLAKE2b-256 e44c9db067fb40673b7431602a337ffd6530953c5116657e515bfe0d018142cb

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page