feat: Implement automatic git repository configuration detection for Gitea
Some checks failed
Test Suite / unit-tests (3.11) (push) Has been cancelled
Test Suite / unit-tests (3.12) (push) Has been cancelled
Test Suite / integration-tests (push) Has been cancelled
Test Suite / e2e-tests (push) Has been cancelled
Test Suite / performance-tests (push) Has been cancelled
Test Suite / code-quality (push) Has been cancelled
Test Suite / security-scan (push) Has been cancelled
Test Suite / test-summary (push) Has been cancelled

- Add GiteaConfig.from_git_repository() method for auto-detection
- Support HTTP(S) and SSH git remote URL formats
- Parse gitea_url, repo_owner, repo_name from git remote origin
- Only requires GITEA_API_TOKEN environment variable
- Update GiteaClient to use auto-detection as primary method
- Maintain backward compatibility with environment variables
- Fix issue creation API to use label IDs instead of names
- Add comprehensive error handling and validation
- Successfully tested with issues #33 and #34

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-09-28 23:27:13 +02:00
parent ad355f970c
commit ad25b2a7d7
4 changed files with 221 additions and 6 deletions

View File

@@ -0,0 +1,111 @@
# 2025-09-28: Gitea Configuration Auto-Detection Implementation
## Overview
Implemented automatic repository configuration detection for Gitea integration, eliminating the need for manual configuration of repository settings.
## Problem Statement
The Gitea configuration previously required manual specification of:
- `gitea_url`: Base Gitea server URL
- `repo_owner`: Repository owner/organization name
- `repo_name`: Repository name
This was redundant since we're always working within the git repository itself, and this information is already available from the git remote configuration.
## Solution Implementation
### 1. New Auto-Detection Method
Added `GiteaConfig.from_git_repository()` method in `gitea/config.py:88-145`:
```python
@classmethod
def from_git_repository(cls) -> "GiteaConfig":
"""Create config by auto-detecting from current git repository.
Only requires GITEA_API_TOKEN environment variable.
All other settings are detected from git remote origin.
"""
```
### 2. Git Remote URL Parsing
Supports multiple git URL formats:
- **HTTPS**: `https://gitea.example.com/owner/repo.git`
- **HTTP**: `http://gitea.example.com/owner/repo.git`
- **SSH**: `git@gitea.example.com:owner/repo.git`
### 3. Configuration Simplification
**Before**: Required 4 environment variables
- `GITEA_URL`
- `GITEA_REPO_OWNER`
- `GITEA_REPO_NAME`
- `GITEA_API_TOKEN`
**After**: Requires only 1 environment variable
- `GITEA_API_TOKEN` (everything else auto-detected)
### 4. Client Integration Update
Updated `GiteaClient` constructor in `gitea/client.py:169-181` to:
1. Attempt auto-detection first
2. Fallback to environment variables if git detection fails
3. Maintain backward compatibility
### 5. Removed Hardcoded Defaults
Cleaned up hardcoded configuration values in `GiteaConfig` class, making it truly dynamic.
## Technical Details
### Git Command Integration
Uses `subprocess.run(['git', 'remote', 'get-url', 'origin'])` to retrieve the remote URL, then parses it using:
- `urllib.parse.urlparse()` for HTTP(S) URLs
- String manipulation for SSH URLs
- Comprehensive error handling for unsupported formats
### Error Handling Strategy
- Graceful fallback to environment-based configuration
- Detailed error messages for parsing failures
- Validation of extracted configuration values
### Testing Verification
- Successfully created test issues (#33, #34) using auto-detection
- Verified functionality with current repository structure
- All existing tests continue to pass (292 passed, 2 skipped)
## Benefits
### 1. Developer Experience
- Zero-configuration setup for repository-based workflows
- Eliminates environment variable management complexity
- Reduces setup documentation requirements
### 2. Reliability
- Eliminates configuration drift between git state and manual settings
- Automatic adaptation when repository URLs change
- Consistent behavior across different development environments
### 3. Security
- Only authentication token needs to be managed as secret
- Repository metadata is derived from trusted git state
- Reduces attack surface of configuration management
## Validation Results
**Test Issue Creation**: Successfully created issues #33 and #34 to verify functionality
**Test Suite**: 292 tests passed, confirming no regression in existing functionality
**Manual Verification**: Confirmed auto-detection extracts correct values:
- gitea_url: `http://92.205.130.254:32166`
- repo_owner: `coulomb`
- repo_name: `markitect_project`
## Impact Assessment
### Immediate Impact
- Simplified development workflow setup
- Reduced configuration management overhead
- Enhanced developer onboarding experience
### Future Considerations
- Foundation for supporting multiple git forge platforms
- Enables repository-portable configuration
- Supports containerized development environments
## Conclusion
The auto-detection implementation successfully eliminates manual repository configuration while maintaining full backward compatibility. This enhancement positions the Gitea integration for broader adoption and reduces barriers to entry for new developers.