Files

205 lines
6.1 KiB
Markdown

# Suyu Build Scripts
This directory contains utility scripts to help with building and maintaining the Suyu project.
## Vcpkg Build Fix Scripts
### `fix-vcpkg-build.ps1` (Recommended)
Comprehensive automated script that resolves vcpkg build issues:
- Cleans existing boost installations
- Clears vcpkg cache and buildtrees
- Reinstalls dependencies in correct order
- Provides troubleshooting guidance
**Usage:**
```powershell
.\scripts\fix-vcpkg-build.ps1
```
### `clean-boost.ps1`
Specialized script for cleaning boost components only:
- Removes all boost packages using boost-uninstall
- Useful for boost-specific issues
**Usage:**
```powershell
.\scripts\clean-boost.ps1
```
### `clean-boost.bat`
Batch file version of the boost cleanup script for environments without PowerShell.
**Usage:**
```cmd
scripts\clean-boost.bat
```
## Common Issues Resolved
### Missing vcpkg-cmake Configuration Files
**Error:** `include could not find requested file: vcpkg-cmake/vcpkg-port-config.cmake`
**Solution:** Run `fix-vcpkg-build.ps1` to install dependencies in correct order
### Boost Version Conflicts
**Error:** `no version database entry for boost-cobalt at 1.80.0`
**Solution:** Run `clean-boost.ps1` then reinstall with `vcpkg install`
### Build Cache Issues
**Error:** Various build failures after vcpkg updates
**Solution:** Use `fix-vcpkg-build.ps1` to clean cache and reinstall
## Other Scripts
### `sync_forgejo_issues.py`
Synchronizes issues between GitHub and Forgejo repositories.
### `test_connection.py` / `test_forgejo_connection.py`
Network connectivity testing utilities.
## For More Information
See `../VCPKG_BUILD_FIX.md` for detailed documentation of vcpkg build fixes and troubleshooting steps.
---
# Forgejo to GitHub Issue Sync
This directory also contains scripts and workflows to synchronize issues from a Forgejo repository to GitHub.
## Overview
The issue sync system addresses the problem of keeping GitHub issues in sync with a Forgejo repository.
**🔧 Recent Fix (Issue #29):**
- Fixed 403 Forbidden error by switching from web scraping to Forgejo REST API
- Corrected malformed GitHub API URL
- Added proper authentication handling for both public and private repositories
- Improved error handling and logging with emoji indicators
- Added comprehensive duplicate detection
- Implemented rate limiting to prevent API abuse
## Files
- `sync_forgejo_issues.py` - Standalone Python script for syncing issues
- `../.github/workflows/clone-issues.yml` - GitHub Actions workflow for automated syncing
## Features
- ✅ **API-based**: Uses Forgejo REST API instead of unreliable web scraping
- ✅ **Duplicate detection**: Prevents creating duplicate issues
- ✅ **Rate limiting**: Includes delays to avoid API rate limits
- ✅ **Error handling**: Robust error handling with informative messages
- ✅ **Authentication**: Supports both authenticated and public access
- ✅ **Attribution**: Clearly marks imported issues with source information
- ✅ **Label preservation**: Maintains original labels and adds import tag
## Setup
### GitHub Secrets
Configure the following secrets in your GitHub repository:
1. **Required:**
- `GITHUB_TOKEN` - GitHub Personal Access Token with `repo` scope
2. **Optional:**
- `FORGEJO_TOKEN` - Forgejo access token (only needed for private repositories)
### Environment Variables
The script uses these environment variables:
- `FORGEJO_URL` - Forgejo API endpoint (e.g., `https://git.suyu.dev/api/v1/repos/suyu/suyu/issues`)
- `FORGEJO_TOKEN` - Forgejo access token (optional for public repos)
- `GITHUB_REPOSITORY` - Target GitHub repository (e.g., `owner/repo`)
- `GITHUB_TOKEN` - GitHub access token
## Usage
### Automated Sync (GitHub Actions)
The workflow runs automatically:
- **Daily** at midnight UTC
- **Manual trigger** via GitHub Actions UI
To modify the schedule, edit `.github/workflows/clone-issues.yml` and change the cron expression.
### Manual Sync (Standalone Script)
1. **Install dependencies:**
```bash
pip install requests
```
2. **Set environment variables:**
```bash
export FORGEJO_URL="https://git.suyu.dev/api/v1/repos/suyu/suyu/issues"
export GITHUB_REPOSITORY="suyu-emu/suyu"
export GITHUB_TOKEN="your_github_token_here"
# Optional: export FORGEJO_TOKEN="your_forgejo_token_here"
```
3. **Run the script:**
```bash
python scripts/sync_forgejo_issues.py
```
## Troubleshooting
### Common Issues
1. **403 Forbidden Error**
- The script will automatically retry without authentication for public repositories
- For private repositories, ensure `FORGEJO_TOKEN` is set correctly
2. **Rate Limiting**
- The script includes automatic delays and rate limiting protection
- If you hit rate limits, the script will pause and continue
3. **Duplicate Issues**
- Issues are prefixed with `[Forgejo]` to distinguish them
- The script checks for both original and prefixed titles to avoid duplicates
## Configuration
### Customizing the Forgejo URL
Update the `FORGEJO_URL` in `.github/workflows/clone-issues.yml` to point to your Forgejo instance:
```yaml
env:
FORGEJO_URL: https://your-forgejo-instance.com/api/v1/repos/owner/repo/issues
```
### Modifying Issue Format
To change how issues are formatted when imported, modify the `create_github_issue` function in the script:
- Change the title prefix (currently `[Forgejo]`)
- Modify the attribution message
- Add or remove labels
## API Endpoints
The script uses these API endpoints:
- **Forgejo**: `GET /api/v1/repos/{owner}/{repo}/issues`
- **GitHub**:
- `GET /repos/{owner}/{repo}/issues` (fetch existing)
- `POST /repos/{owner}/{repo}/issues` (create new)
## Contributing
When modifying the sync script:
1. Test changes with the standalone script first
2. Update both the workflow and standalone script
3. Update this documentation if needed
4. Test with a small number of issues before full deployment
## Issue Resolution
This implementation resolves the original issue #29 by:
- Using `https://git.suyu.dev/api/v1/repos/suyu/suyu/issues` instead of the web interface
- Handling 403 errors gracefully by falling back to unauthenticated requests for public repos