Thank you for your interest in contributing to IssueParser! This document provides guidelines and information for contributors.
- Code of Conduct
- Getting Started
- Development Setup
- Making Changes
- Pull Request Process
- Coding Standards
We are committed to making participation in this project a harassment-free experience for everyone, regardless of background or identity.
- Be respectful and inclusive
- Provide constructive feedback
- Focus on what is best for the community
- Show empathy towards other contributors
- Harassment, trolling, or personal attacks
- Publishing others' private information
- Other conduct which could reasonably be considered inappropriate
Before creating a bug report, please check existing issues to avoid duplicates.
When filing a bug, include:
- Description - Clear description of the bug
- Steps to Reproduce - Numbered steps to reproduce the issue
- Expected Behavior - What you expected to happen
- Actual Behavior - What actually happened
- Environment - Go version, OS, Kubernetes version if applicable
- Logs - Relevant error messages or logs
Feature requests are welcome! Please include:
- Problem Statement - What problem does this solve?
- Proposed Solution - How would you like it to work?
- Alternatives Considered - Other approaches you've thought about
- Additional Context - Any other relevant information
Look for issues labeled:
good first issue- Simple issues for newcomershelp wanted- Issues where we need community help
- Go 1.21 or later
- Docker (for container builds)
- kubectl (for Kubernetes testing)
- Access to an OpenAI-compatible LLM endpoint (optional, for integration testing)
# Clone the repository
git clone https://github.com/defilan/issueparser
cd issueparser
# Build the binary
make build
# Run tests
make test
# Run locally (requires LLM endpoint)
export GITHUB_TOKEN=your_token # optional
./bin/issueparser --llm-endpoint="http://localhost:8080"issueparser/
├── cmd/
│ └── issueparser/
│ └── main.go # CLI entry point
├── internal/
│ ├── analyzer/
│ │ └── analyzer.go # Theme extraction logic
│ ├── github/
│ │ └── client.go # GitHub API client
│ ├── llm/
│ │ └── client.go # LLM API client
│ └── report/
│ └── report.go # Markdown report generator
├── deploy/
│ ├── llmkube-qwen-14b.yaml
│ └── job.yaml
├── scripts/
│ └── deploy-to-remote.sh
├── Dockerfile
├── Makefile
└── go.mod
Create branches from main using this naming convention:
| Branch Type | Pattern | Example |
|---|---|---|
| Feature | feat/* |
feat/add-label-filter |
| Bug Fix | fix/* |
fix/rate-limit-handling |
| Documentation | docs/* |
docs/improve-readme |
| Refactor | refactor/* |
refactor/simplify-analyzer |
Follow Conventional Commits:
<type>: <description>
[optional body]
[optional footer]
Types:
feat:- New featurefix:- Bug fixdocs:- Documentation onlyrefactor:- Code change that neither fixes a bug nor adds a featuretest:- Adding or updating testschore:- Maintenance tasks
Examples:
feat: add support for filtering by issue state
fix: handle GitHub API rate limit errors gracefully
docs: add examples for custom LLM endpoints
- Code builds without errors (
make build) - Tests pass (
make test) - Code follows Go style guidelines
- Commit messages follow conventional commits format
- Documentation updated if needed
Use the same format as commit messages:
feat: add support for filtering by issue state
- Submit your PR against
main - Ensure CI checks pass
- Wait for maintainer review
- Address any feedback
- Once approved, a maintainer will merge
- Follow Effective Go
- Use
gofmtfor formatting - Keep functions focused and small
- Handle errors explicitly
// Good: Clear error handling
resp, err := client.FetchIssues(ctx, owner, repo, opts)
if err != nil {
return nil, fmt.Errorf("failed to fetch issues: %w", err)
}
// Good: Descriptive variable names
issuesByTheme := make(map[string][]Issue)
// Good: Comments explain "why", not "what"
// Skip closed issues older than 1 year to focus on relevant themes
if issue.ClosedAt.Before(cutoffDate) {
continue
}- Wrap errors with context using
fmt.Errorf("context: %w", err) - Return errors rather than logging and continuing
- Provide actionable error messages
- Write table-driven tests where appropriate
- Test error cases, not just happy paths
- Keep tests focused on one behavior
- Open a GitHub Issue for bugs or feature requests
- Check existing issues before creating new ones
Thank you for contributing!