Contributing to gcli2api
First off, thank you for considering contributing to gcli2api! It's people like you that make gcli2api such a great tool.
Code of Conduct
This project is intended for personal learning and research purposes only. By participating, you are expected to uphold this code and respect the CNC-1.0 license restrictions on commercial use.
How Can I Contribute?
Reporting Bugs
Before creating bug reports, please check the existing issues to avoid duplicates. When you create a bug report, include as many details as possible:
- Use a clear and descriptive title
- Describe the exact steps to reproduce the problem
- Provide specific examples - Include code snippets, configuration files, or log outputs
- Describe the behavior you observed and what you expected to see
- Include environment details: OS, Python version, Docker version (if applicable)
Suggesting Enhancements
Enhancement suggestions are tracked as GitHub issues. When creating an enhancement suggestion, include:
- Use a clear and descriptive title
- Provide a detailed description of the suggested enhancement
- Explain why this enhancement would be useful
- List any alternative solutions you've considered
Pull Requests
- Fork the repo and create your branch from
master - If you've added code that should be tested, add tests
- If you've changed APIs, update the documentation
- Ensure the test suite passes
- Make sure your code follows the existing style
- Write a clear commit message
Development Setup
Prerequisites
- Python 3.12 or higher
- pip or uv package manager
Setting Up Your Development Environment
# Clone your fork
git clone https://github.com/YOUR_USERNAME/gcli2api.git
cd gcli2api
# Install development dependencies
make install-dev
# or
pip install -e ".[dev]"
# Copy environment example
cp .env.example .env
# Edit .env with your configuration
Development Workflow
# Run tests
make test
# Format code
make format
# Run linters
make lint
# Run the application locally
make run
Testing
We use pytest for testing. All new features should include appropriate tests.
# Run all tests
make test
# Run with coverage
make test-cov
# Run specific test file
python -m pytest test_tool_calling.py -v
Code Style
- We use Black for code formatting (line length: 100)
- We use flake8 for linting
- We use mypy for type checking (optional, but encouraged)
# Format your code before committing
make format
# Check if code is properly formatted
make format-check
# Run linters
make lint
Project Structure
gcli2api/
βββ src/ # Main source code
β βββ auth.py # Authentication and OAuth
β βββ credential_manager.py # Credential rotation
β βββ openai_router.py # OpenAI-compatible endpoints
β βββ gemini_router.py # Gemini native endpoints
β βββ openai_transfer.py # Format conversion
β βββ storage/ # Storage backends (Redis, MongoDB, Postgres, File)
β βββ ...
βββ front/ # Frontend static files
βββ tests/ # Test directory (to be created)
βββ test_*.py # Test files (root level)
βββ web.py # Main application entry point
βββ config.py # Configuration management
βββ requirements.txt # Production dependencies
Coding Guidelines
Python Style
- Follow PEP 8 guidelines
- Use type hints where appropriate
- Write docstrings for classes and functions
- Keep functions focused and concise
Commit Messages
- Use the present tense ("Add feature" not "Added feature")
- Use the imperative mood ("Move cursor to..." not "Moves cursor to...")
- Limit the first line to 72 characters or less
- Reference issues and pull requests liberally after the first line
Documentation
- Update the README.md if you change functionality
- Comment your code where necessary
- Update the .env.example if you add new configuration options
License
By contributing to gcli2api, you agree that your contributions will be licensed under the CNC-1.0 license. This is a strict anti-commercial license - see LICENSE for details.
Important License Restrictions
- β No commercial use
- β No use by companies with revenue > $1M USD
- β No use by VC-backed or publicly traded companies
- β Personal learning, research, and educational use only
- β Open source integration (must follow same license)
Questions?
Feel free to open an issue with your question or reach out to the maintainers.
Thank you for contributing! π