Add gitea-shim integration and update workflow services
This commit is contained in:
216
gitea-shim/python/MIGRATION.md
Normal file
216
gitea-shim/python/MIGRATION.md
Normal file
@ -0,0 +1,216 @@
|
||||
# Migration Guide for Workflows
|
||||
|
||||
This guide shows how to migrate your workflow files from direct GitHub API usage to the Gitea shim.
|
||||
|
||||
## Quick Migration
|
||||
|
||||
### Step 1: Add Import Path
|
||||
|
||||
Add this to the top of your workflow files:
|
||||
|
||||
```python
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
# Add the gitea-shim to the path
|
||||
gitea_shim_path = Path(__file__).parent.parent.parent.parent.parent / "gitea-shim" / "python"
|
||||
sys.path.insert(0, str(gitea_shim_path))
|
||||
|
||||
try:
|
||||
from gitea_shim import get_github_client, is_gitea_mode
|
||||
except ImportError:
|
||||
# Fallback to regular GitHub if shim is not available
|
||||
from github import Github as get_github_client
|
||||
is_gitea_mode = lambda: False
|
||||
```
|
||||
|
||||
### Step 2: Replace GitHub Client Creation
|
||||
|
||||
**Before:**
|
||||
```python
|
||||
from github import Github
|
||||
gh = Github(os.getenv("GITHUB_TOKEN"))
|
||||
```
|
||||
|
||||
**After:**
|
||||
```python
|
||||
gh = get_github_client()
|
||||
```
|
||||
|
||||
### Step 3: Add Logging (Optional)
|
||||
|
||||
Add logging to see which API you're using:
|
||||
|
||||
```python
|
||||
log_key_value("API Mode", "Gitea" if is_gitea_mode() else "GitHub")
|
||||
```
|
||||
|
||||
## Complete Example
|
||||
|
||||
### Before Migration
|
||||
|
||||
```python
|
||||
"""Task decomposition workflow implementation."""
|
||||
|
||||
import os
|
||||
from github import Github
|
||||
import requests
|
||||
from prometheus_swarm.workflows.base import Workflow
|
||||
# ... other imports
|
||||
|
||||
class RepoSummarizerWorkflow(Workflow):
|
||||
def setup(self):
|
||||
"""Set up repository and workspace."""
|
||||
check_required_env_vars(["GITHUB_TOKEN", "GITHUB_USERNAME"])
|
||||
validate_github_auth(os.getenv("GITHUB_TOKEN"), os.getenv("GITHUB_USERNAME"))
|
||||
|
||||
# Get the default branch from GitHub
|
||||
try:
|
||||
gh = Github(os.getenv("GITHUB_TOKEN"))
|
||||
self.context["repo_full_name"] = (
|
||||
f"{self.context['repo_owner']}/{self.context['repo_name']}"
|
||||
)
|
||||
|
||||
repo = gh.get_repo(
|
||||
f"{self.context['repo_owner']}/{self.context['repo_name']}"
|
||||
)
|
||||
self.context["base"] = repo.default_branch
|
||||
log_key_value("Default branch", self.context["base"])
|
||||
except Exception as e:
|
||||
log_error(e, "Failed to get default branch, using 'main'")
|
||||
self.context["base"] = "main"
|
||||
```
|
||||
|
||||
### After Migration
|
||||
|
||||
```python
|
||||
"""Task decomposition workflow implementation."""
|
||||
|
||||
import os
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
# Add the gitea-shim to the path
|
||||
gitea_shim_path = Path(__file__).parent.parent.parent.parent.parent / "gitea-shim" / "python"
|
||||
sys.path.insert(0, str(gitea_shim_path))
|
||||
|
||||
try:
|
||||
from gitea_shim import get_github_client, is_gitea_mode
|
||||
except ImportError:
|
||||
# Fallback to regular GitHub if shim is not available
|
||||
from github import Github as get_github_client
|
||||
is_gitea_mode = lambda: False
|
||||
|
||||
import requests
|
||||
from prometheus_swarm.workflows.base import Workflow
|
||||
# ... other imports
|
||||
|
||||
class RepoSummarizerWorkflow(Workflow):
|
||||
def setup(self):
|
||||
"""Set up repository and workspace."""
|
||||
check_required_env_vars(["GITHUB_TOKEN", "GITHUB_USERNAME"])
|
||||
validate_github_auth(os.getenv("GITHUB_TOKEN"), os.getenv("GITHUB_USERNAME"))
|
||||
|
||||
# Get the default branch from GitHub/Gitea
|
||||
try:
|
||||
# Use the shim to get GitHub-compatible client
|
||||
gh = get_github_client()
|
||||
self.context["repo_full_name"] = (
|
||||
f"{self.context['repo_owner']}/{self.context['repo_name']}"
|
||||
)
|
||||
|
||||
repo = gh.get_repo(
|
||||
f"{self.context['repo_owner']}/{self.context['repo_name']}"
|
||||
)
|
||||
self.context["base"] = repo.default_branch
|
||||
log_key_value("Default branch", self.context["base"])
|
||||
log_key_value("API Mode", "Gitea" if is_gitea_mode() else "GitHub")
|
||||
except Exception as e:
|
||||
log_error(e, "Failed to get default branch, using 'main'")
|
||||
self.context["base"] = "main"
|
||||
```
|
||||
|
||||
## Environment Configuration
|
||||
|
||||
### For GitHub (Default)
|
||||
```bash
|
||||
export GITHUB_TOKEN="your_github_token"
|
||||
# USE_GITEA is not set or set to 'false'
|
||||
```
|
||||
|
||||
### For Gitea
|
||||
```bash
|
||||
export USE_GITEA="true"
|
||||
export GITEA_URL="http://your-gitea-instance:3000"
|
||||
export GITEA_TOKEN="your_gitea_token" # or use GITHUB_TOKEN
|
||||
```
|
||||
|
||||
## Testing the Migration
|
||||
|
||||
1. **Test with GitHub:**
|
||||
```bash
|
||||
export GITHUB_TOKEN="your_token"
|
||||
python your_workflow.py
|
||||
```
|
||||
|
||||
2. **Test with Gitea:**
|
||||
```bash
|
||||
export USE_GITEA="true"
|
||||
export GITEA_URL="http://localhost:3000"
|
||||
export GITHUB_TOKEN="your_token"
|
||||
python your_workflow.py
|
||||
```
|
||||
|
||||
3. **Run the shim test:**
|
||||
```bash
|
||||
cd gitea-shim/python
|
||||
python test_shim.py
|
||||
```
|
||||
|
||||
## Common Issues and Solutions
|
||||
|
||||
### Issue: Import Error
|
||||
**Error:** `ModuleNotFoundError: No module named 'gitea_shim'`
|
||||
|
||||
**Solution:** Check that the path to the gitea-shim is correct in your import statement.
|
||||
|
||||
### Issue: Gitea Connection Failed
|
||||
**Error:** `Connection refused` or `404 Not Found`
|
||||
|
||||
**Solution:**
|
||||
1. Verify `GITEA_URL` is correct
|
||||
2. Ensure Gitea is running
|
||||
3. Check that your token has the right permissions
|
||||
|
||||
### Issue: Repository Not Found
|
||||
**Error:** `Repository owner/repo not found`
|
||||
|
||||
**Solution:**
|
||||
1. Verify the repository exists in your Gitea instance
|
||||
2. Check that your token has access to the repository
|
||||
3. Ensure the repository name is correct (case-sensitive)
|
||||
|
||||
### Issue: Authentication Failed
|
||||
**Error:** `401 Unauthorized`
|
||||
|
||||
**Solution:**
|
||||
1. Verify your token is valid
|
||||
2. Check token permissions
|
||||
3. Ensure `GITHUB_TOKEN` or `GITEA_TOKEN` is set correctly
|
||||
|
||||
## Benefits of Migration
|
||||
|
||||
1. **Code Reusability:** Same code works with both GitHub and Gitea
|
||||
2. **Easy Testing:** Test against Gitea locally, deploy to GitHub
|
||||
3. **Flexibility:** Switch between APIs without code changes
|
||||
4. **Consistency:** Same interface regardless of backend
|
||||
5. **Future-Proof:** Easy to add support for other Git hosting platforms
|
||||
|
||||
## Support
|
||||
|
||||
If you encounter issues during migration:
|
||||
|
||||
1. Check the test output: `python test_shim.py`
|
||||
2. Verify environment variables are set correctly
|
||||
3. Check the logs for detailed error messages
|
||||
4. Ensure Gitea is running and accessible
|
Reference in New Issue
Block a user