# Gitea Webhook Ambassador (Python Enhanced Version) This is a Gitea Webhook Ambassador service rewritten in Python, providing the same features as the Go version, but with an added web interface and more management features. ## 🚀 Quick Start ### Method 1: Use the devbox script (recommended, same as Go version) ```bash # Install dependencies ./devbox install # Initialize database ./devbox init # Start the service ./devbox start # Check status ./devbox status # View logs ./devbox logs # Stop the service ./devbox stop ``` ### Method 2: Use Makefile ```bash # Install dependencies make install # Initialize database make init # Start the service (foreground) make run # Start the service (background) make start # Check status make status # View logs make logs # Stop the service make stop ``` ### Method 3: Use Python directly ```bash # Create virtual environment python3 -m venv venv source venv/bin/activate # Install dependencies pip install -r requirements.txt # Initialize database python -c "from app.models.database import create_tables; create_tables()" # Start the service python -m uvicorn app.main_enhanced:app --host 0.0.0.0 --port 8000 ``` ## 📁 Directory Structure (same as Go version) ``` gitea-webhook-ambassador-python/ ├── app/ # Application code │ ├── auth/ # Authentication module │ ├── handlers/ # API handlers │ ├── models/ # Data models │ ├── templates/ # HTML templates │ ├── static/ # Static files │ └── main_enhanced.py # Main application entry ├── cmd/ # CLI tools (same as Go version) │ └── server/ # Server startup ├── configs/ # Configuration files (same as Go version) │ └── config.yaml # Main configuration file ├── data/ # Data directory (same as Go version) │ └── *.db # SQLite database files ├── logs/ # Log directory (same as Go version) │ └── service.log # Service log ├── devbox # Startup script (same as Go version) ├── Makefile # Build script (same as Go version) ├── requirements.txt # Python dependencies └── README_ENHANCED.md # This document ``` ## 🔧 Configuration Edit the `configs/config.yaml` file: ```yaml server: port: 8000 webhookPath: "/webhook" secretHeader: "X-Gitea-Signature" secretKey: "admin-secret-key-change-in-production" jenkins: url: "http://jenkins.example.com" username: "jenkins-user" token: "jenkins-api-token" timeout: 30 admin: token: "admin-api-token" database: path: "data/gitea-webhook-ambassador.db" logging: level: "info" format: "text" file: "logs/service.log" worker: poolSize: 10 queueSize: 100 maxRetries: 3 retryBackoff: 1 eventCleanup: interval: 3600 expireAfter: 7200 ``` ## 🌐 Web Interface After starting the service, visit the following addresses: - **Login page**: http://localhost:8000 - **Dashboard**: http://localhost:8000/dashboard - **API Docs**: http://localhost:8000/docs ### Default login credentials - **Username**: admin - **Password**: admin-secret-key-change-in-production ## 📊 Features ### ✅ Same features as Go version - Gitea Webhook receiving and processing - Jenkins job triggering - Project mapping configuration - Branch pattern matching - Retry mechanism - Logging ### 🆕 Python version enhancements - **Web login interface**: Modern UI based on Bootstrap 5 - **Database storage**: SQLite database for API keys and configuration - **JWT authentication**: 7-day valid JWT tokens - **Frontend dashboard**: Multi-tab management interface - **Auto redirect**: Unauthenticated users are redirected to login - **Health check**: Service status monitoring - **Statistics**: Request statistics and performance metrics ## 🔌 API Endpoints ### Authentication - `POST /api/auth/login` - User login - `GET /api/auth/verify` - Verify JWT token ### Project Management - `GET /api/projects` - Get project list - `POST /api/projects` - Create new project - `PUT /api/projects/{id}` - Update project - `DELETE /api/projects/{id}` - Delete project ### API Key Management - `GET /api/keys` - Get API key list - `POST /api/keys` - Create new API key - `DELETE /api/keys/{id}` - Delete API key ### System Monitoring - `GET /api/health` - Health check - `GET /api/stats` - Statistics - `GET /api/logs` - View logs ### Webhook Handling - `POST /webhook` - Gitea Webhook endpoint ## 🛠️ Development ### Run tests ```bash # Use devbox ./devbox test # Use Makefile make test # Run directly python test_enhanced_features.py ``` ### Code linting ```bash # Use Makefile make lint # Run directly flake8 app/ --max-line-length=120 --ignore=E501,W503 ``` ### Clean up ```bash # Use devbox ./devbox clean # Use Makefile make clean ``` ## 🐳 Docker Deployment ### Build image ```bash # Use Makefile make docker-build # Build directly docker build -t gitea-webhook-ambassador:latest . ``` ### Run container ```bash docker run -d \ --name gitea-webhook-ambassador \ -p 8000:8000 \ -v $(pwd)/configs:/app/configs \ -v $(pwd)/data:/app/data \ -v $(pwd)/logs:/app/logs \ gitea-webhook-ambassador:latest ``` ## 📈 Comparison with Go Version | Feature | Go Version | Python Version | |---------|------------|---------------| | **Startup** | `./devbox start` | `./devbox start` | | **Directory Structure** | Standard Go project | Same as Go version | | **Config File** | `configs/config.yaml` | `configs/config.yaml` | | **Log Directory** | `logs/` | `logs/` | | **Data Directory** | `data/` | `data/` | | **Web Interface** | ❌ No | ✅ Full dashboard | | **Database** | ❌ No | ✅ SQLite | | **JWT Auth** | ❌ No | ✅ 7-day validity | | **API Key Management** | ❌ No | ✅ Database storage | | **Health Check** | ✅ Basic | ✅ Enhanced | | **Performance** | 🚀 Very high | 🚀 High | ## 🔄 Migration Guide ### Migrate from Go version to Python version 1. **Stop Go service** ```bash cd /path/to/go-version ./devbox stop ``` 2. **Start Python service** ```bash cd /path/to/python-version ./devbox install ./devbox init ./devbox start ``` 3. **Verify service** ```bash ./devbox status curl http://localhost:8000/api/health ``` 4. **Configure Webhook** - Update Gitea Webhook URL to the new Python service address - Ensure Jenkins configuration is correct ## 🆘 Troubleshooting ### Common Issues **1. Port 8000 is occupied** ```bash # Check port usage lsof -i :8000 # Stop the occupying process sudo kill -9 ``` **2. Virtual environment issues** ```bash # Recreate virtual environment rm -rf venv ./devbox install ``` **3. Database issues** ```bash # Reinitialize database ./devbox init ``` **4. Permission issues** ```bash # Set script permissions chmod +x devbox ``` ### View logs ```bash # View real-time logs ./devbox follow # View latest logs ./devbox logs # View full logs tail -f logs/service.log ``` ## 📞 Support If you have any issues, please check: 1. Service status: `./devbox status` 2. Log information: `./devbox logs` 3. Configuration file: `configs/config.yaml` 4. Network connection: `curl http://localhost:8000/api/health`