# Contributing Guide ## Welcome Thank you for your interest in contributing to Headquarter! This document provides guidelines and workflows for contributing. ## Getting Started 1. Fork the repository 2. Clone your fork: `git clone https://github.com/your-username/headquarter.git` 3. Set up development environment (see [Setup Guide](./setup.md)) 4. Create a branch: `git checkout -b feature/your-feature` ## Development Workflow ### 1. Find or Create an Issue - Check existing issues for something to work on - Create an issue to discuss new features before implementing - Comment on issues to claim them ### 2. Create a Branch ```bash # Feature branch git checkout -b feature/description # Bug fix branch git checkout -b fix/description # Documentation branch git checkout -b docs/description ``` ### 3. Make Changes - Write clear, concise code - Follow existing patterns and conventions - Add tests for new functionality - Update documentation as needed ### 4. Run Quality Gates ```bash # Backend cd apps/api ruff check src/ tests/ mypy src/ pytest # Frontend cd apps/web npm run lint npm run typecheck npm run test npm run build ``` ### 5. Commit Changes We use conventional commits: ```bash # Format: type(scope): description # Examples: git commit -m "feat(auth): add OAuth2 login" git commit -m "fix(api): handle missing user gracefully" git commit -m "docs(readme): update installation instructions" git commit -m "test(git): add URL parsing tests" git commit -m "refactor(models): extract base repository" ``` **Types**: - `feat`: New feature - `fix`: Bug fix - `docs`: Documentation - `style`: Formatting (no code change) - `refactor`: Code restructuring - `test`: Adding tests - `chore`: Maintenance tasks ### 6. Push and Create Pull Request ```bash git push origin feature/description ``` **PR Description should include**: - What changed and why - How to test - Screenshots (for UI changes) - Link to related issue ## Code Standards ### Python (Backend) **Style**: Follow PEP 8 and project conventions ```python # Function naming: snake_case def get_user_by_id(user_id: str) -> User | None: pass # Class naming: PascalCase class GitRepositoryService: pass # Constants: UPPER_SNAKE_CASE MAX_FILE_SIZE = 1024 * 1024 # 1MB # Type hints required def process_data(data: dict[str, Any]) -> ProcessedResult: pass ``` **Docstrings**: Google style ```python def extract_base_repo_url(url: str) -> str | None: """Extract base repository URL from a browser URL. Args: url: The URL to parse, may be a browser URL or git URL. Returns: The base repository URL with .git suffix, or None if parsing fails. Examples: >>> extract_base_repo_url("https://github.com/user/repo/tree/main") 'https://github.com/user/repo.git' >>> extract_base_repo_url("https://github.com/user/repo.git") 'https://github.com/user/repo.git' """ pass ``` ### TypeScript (Frontend) **Style**: Follow existing patterns ```typescript // Interface naming: PascalCase interface User { id: string; email: string; name: string; } // Function naming: camelCase function getUserById(userId: string): Promise { return api.get(`/users/${userId}`); } // Component naming: PascalCase const UserProfile: React.FC = ({ user }) => { return
{user.name}
; }; ``` ## Testing Requirements ### New Features - Unit tests for business logic - Integration tests for API endpoints - Component tests for UI components ### Bug Fixes - Regression test that would catch the bug - Verify fix with the test ### Example ```python # Backend test def test_extract_github_browser_url(): url = "https://github.com/user/repo/tree/main" result = extract_base_repo_url(url) assert result == "https://github.com/user/repo.git" # Frontend test test('shows file tree', () => { render( {}} />); expect(screen.getByText('src')).toBeInTheDocument(); }); ``` ## Documentation Update documentation when: - Adding new features - Changing API endpoints - Modifying configuration - Adding environment variables **Documentation locations**: - `README.md` - Project overview - `docs/features/` - Feature documentation - `docs/api/` - API documentation - `docs/deployment/` - Deployment guides ## Review Process 1. **Automated checks** must pass (CI/CD) 2. **Code review** by at least one maintainer 3. **Approval** required before merge 4. **Squash merge** to keep history clean ### Review Checklist **For Authors**: - [ ] Tests pass locally - [ ] Quality gates pass - [ ] Documentation updated - [ ] PR description is clear **For Reviewers**: - [ ] Code makes sense - [ ] Tests cover changes - [ ] No security issues - [ ] Follows conventions ## Release Process 1. Update version in `pyproject.toml` and `package.json` 2. Update `CHANGELOG.md` 3. Create git tag: `git tag v1.2.3` 4. Push tag: `git push origin v1.2.3` 5. Create GitHub release with notes ## Community ### Communication Channels - GitHub Issues: Bug reports and feature requests - GitHub Discussions: Questions and ideas - Pull Requests: Code contributions ### Code of Conduct - Be respectful and inclusive - Welcome newcomers - Focus on constructive feedback - Respect different viewpoints ## Questions? - Check existing documentation - Search closed issues - Ask in GitHub Discussions - Join community chat (if available) ## Resources - [Development Setup](./setup.md) - [Testing Guide](./testing.md) - [Quality Gates](./quality-gates.md) - [Project README](../../README.md)