Files
gh-celebs/README.md
2026-03-23 17:37:45 +02:00

226 lines
6.0 KiB
Markdown

# gh-celebs
A fast, non-interactive CLI tool for searching GitHub repositories by popularity (stars). Uses a local SQLite database that learns and grows as you search.
## Features
- **Smart Caching**: Searches local database first, only hits GitHub API when needed
- **Popularity-Based**: Results sorted by star count (descending)
- **Dual Output Modes**: Clean plain text (default) or JSON (`--json`)
- **Repository Updates**: Refresh cached repo data with a single command
- **Rate Limit Awareness**: Displays remaining API calls and warns when running low
- **Configurable**: Optional GitHub token for higher rate limits (30 vs 10 calls/minute)
- **Cross-Platform**: Works on Linux, macOS, and Windows
## Installation
### From Source
```bash
git clone https://github.com/yourusername/gh-celebs
cd gh-celebs
cargo build --release
```
The binary will be available at `target/release/gh-celebs`.
### Prerequisites
- Rust 1.70+ (for building from source)
- GitHub account (optional, for higher API rate limits)
## Usage
### Search for Repositories
```bash
# Search for "react" (default: top 5 results)
gh-celebs react
# Search with custom limit
gh-celebs react --limit 10
gh-celebs react -n 10
# JSON output for scripting
gh-celebs react --json
# Combine options
gh-celebs machine learning --limit 20 --json
```
### Update Cached Repositories
```bash
# Update all cached repositories
gh-celebs update
# Update a specific repository
gh-celebs update facebook/react
```
### Help
```bash
gh-celebs --help
gh-celebs update --help
```
## Example Output
### Plain Text (Default)
```
1. facebook/react (220,473 ⭐) - Updated 2026-01-15
https://github.com/facebook/react
A declarative, efficient, and flexible JavaScript library for building user interfaces.
2. vuejs/vue (210,123 ⭐) - Updated 2026-01-14
https://github.com/vuejs/vue
Vue.js is a progressive, incrementally-adoptable JavaScript framework...
3. vercel/next.js (105,234 ⭐) - Updated 2026-01-16
https://github.com/vercel/next.js
The React Framework for the Web
API: [8/10 calls remaining]
```
### JSON Output
```json
{
"query": "react",
"limit": 5,
"api_remaining": 8,
"api_limit": 10,
"total_cached": 1247,
"results": [
{
"rank": 1,
"full_name": "facebook/react",
"stars": 220473,
"html_url": "https://github.com/facebook/react",
"description": "A declarative, efficient, and flexible JavaScript library...",
"language": "JavaScript",
"cached_at": "2024-01-15T10:30:00Z"
}
]
}
```
## Configuration
### Config File Location
- **Linux**: `~/.config/gh-celebs/config.toml`
- **macOS**: `~/Library/Application Support/com.gh-celebs.gh-celebs/config.toml`
- **Windows**: `%APPDATA%\gh-celebs\gh-celebs\config\config.toml`
### GitHub Token (Optional)
Add a GitHub personal access token to increase rate limits from 10 to 30 requests per minute:
```toml
[github]
token = "ghp_xxxxxxxxxxxxxxxxxxxx"
```
To create a token:
1. Go to GitHub → Settings → Developer settings → Personal access tokens
2. Generate a new token (no scopes required for public repo search)
3. Add it to your config file
### Database Location
The local SQLite database is stored alongside the config:
- **Linux**: `~/.local/share/gh-celebs/repos.db`
- **macOS**: `~/Library/Application Support/com.gh-celebs.gh-celebs/repos.db`
- **Windows**: `%APPDATA%\gh-celebs\gh-celebs\data\repos.db`
## How It Works
1. **Local Search**: When you run a query, the tool first searches the local SQLite database for cached repositories matching your query (by name or description).
2. **API Fallback**: If local results are insufficient, the tool queries the GitHub Search API for additional repositories.
3. **Smart Caching**: API results are automatically cached to the local database for future searches.
4. **Merging & Sorting**: Local and API results are merged, sorted by star count, and the top N results are returned.
5. **Updates**: Use the `update` command to refresh star counts and metadata for cached repositories.
## Rate Limits
- **Anonymous**: 10 requests per minute
- **Authenticated**: 30 requests per minute (with token)
The tool displays remaining API calls and warns when running low:
```
Warning: Rate limit running low (2 remaining)
```
## Tech Stack
- **Language**: Rust
- **Database**: SQLite (via `rusqlite`)
- **HTTP Client**: `reqwest` (async)
- **CLI**: `clap` (derive-based)
- **Serialization**: `serde`
- **Error Handling**: `anyhow`
## Project Structure
```
gh-celebs/
├── Cargo.toml
├── README.md
└── src/
├── main.rs # Entry point and orchestration
├── cli.rs # CLI argument definitions
├── config.rs # Configuration loading
├── db.rs # Database operations
├── github.rs # GitHub API client
├── models.rs # Data structures
├── output.rs # Output formatters
└── search.rs # Search logic
```
## OpenCode Integration
This project includes an **OpenCode skill** located at `.opencode/skills/gh-celebs/SKILL.md` that enables AI assistants to search GitHub repositories using gh-celebs.
The skill provides:
- Automated command construction based on natural language queries
- Rate limit awareness and error handling
- Best practices for searching and updating repositories
- Integration with the OpenCode skill system
For AI assistants: When users ask to "search GitHub repositories", "find popular GitHub repos", or similar queries, use the gh-celebs skill to execute the search.
## Exit Codes
- `0` - Success
- `1` - Error (invalid arguments, API errors, etc.)
## License
MIT License
## Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
## Future Enhancements
- [ ] Filter by language (`--lang rust`)
- [ ] Sort options (`--sort updated`, `--sort created`)
- [ ] Export to CSV/JSON file (`--export results.json`)
- [ ] Fuzzy search matching
- [ ] Configurable database location
## Acknowledgments
Built with ❤️ using Rust and the GitHub API.