mirror of
https://github.com/RayLabsHQ/gitea-mirror.git
synced 2025-12-09 13:06:45 +03:00
fix: Complete Issue #72 - Fix automatic mirroring and repository cleanup
Major fixes for Docker environment variable issues and cleanup functionality: 🔧 **Duration Parser & Scheduler Fixes** - Add comprehensive duration parser supporting "8h", "30m", "24h" formats - Fix GITEA_MIRROR_INTERVAL environment variable mapping to scheduler - Auto-enable scheduler when GITEA_MIRROR_INTERVAL is set - Improve scheduler logging to clarify timing behavior (from last run, not startup) 🧹 **Repository Cleanup Service** - Complete repository cleanup service for orphaned repos (unstarred, deleted) - Fix cleanup configuration logic - now works with CLEANUP_DELETE_IF_NOT_IN_GITHUB=true - Auto-enable cleanup when deleteIfNotInGitHub is enabled - Add manual cleanup trigger API endpoint (/api/cleanup/trigger) - Support archive/delete actions with dry-run mode and protected repos 🐛 **Environment Variable Integration** - Fix scheduler not recognizing GITEA_MIRROR_INTERVAL=8h - Fix cleanup requiring both CLEANUP_DELETE_FROM_GITEA and CLEANUP_DELETE_IF_NOT_IN_GITHUB - Auto-enable services when relevant environment variables are set - Better error logging and debugging information 📚 **Documentation Updates** - Update .env.example with auto-enabling behavior notes - Update ENVIRONMENT_VARIABLES.md with clarified functionality - Add comprehensive tests for duration parsing This resolves the core issues where: 1. GITEA_MIRROR_INTERVAL=8h was not working for automatic mirroring 2. Repository cleanup was not working despite CLEANUP_DELETE_IF_NOT_IN_GITHUB=true 3. Users had no visibility into why scheduling/cleanup wasn't working 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
import { defineMiddleware } from 'astro:middleware';
|
||||
import { initializeRecovery, hasJobsNeedingRecovery, getRecoveryStatus } from './lib/recovery';
|
||||
import { startCleanupService, stopCleanupService } from './lib/cleanup-service';
|
||||
import { startSchedulerService, stopSchedulerService } from './lib/scheduler-service';
|
||||
import { startRepositoryCleanupService, stopRepositoryCleanupService } from './lib/repository-cleanup-service';
|
||||
import { initializeShutdownManager, registerShutdownCallback } from './lib/shutdown-manager';
|
||||
import { setupSignalHandlers } from './lib/signal-handlers';
|
||||
import { auth } from './lib/auth';
|
||||
@@ -11,6 +13,8 @@ import { initializeConfigFromEnv } from './lib/env-config-loader';
|
||||
let recoveryInitialized = false;
|
||||
let recoveryAttempted = false;
|
||||
let cleanupServiceStarted = false;
|
||||
let schedulerServiceStarted = false;
|
||||
let repositoryCleanupServiceStarted = false;
|
||||
let shutdownManagerInitialized = false;
|
||||
let envConfigInitialized = false;
|
||||
|
||||
@@ -152,6 +156,44 @@ export const onRequest = defineMiddleware(async (context, next) => {
|
||||
}
|
||||
}
|
||||
|
||||
// Start scheduler service only once after recovery is complete
|
||||
if (recoveryInitialized && !schedulerServiceStarted) {
|
||||
try {
|
||||
console.log('Starting automatic mirror scheduler service...');
|
||||
startSchedulerService();
|
||||
|
||||
// Register scheduler service shutdown callback
|
||||
registerShutdownCallback(async () => {
|
||||
console.log('🛑 Shutting down scheduler service...');
|
||||
stopSchedulerService();
|
||||
});
|
||||
|
||||
schedulerServiceStarted = true;
|
||||
} catch (error) {
|
||||
console.error('Failed to start scheduler service:', error);
|
||||
// Don't fail the request if scheduler service fails to start
|
||||
}
|
||||
}
|
||||
|
||||
// Start repository cleanup service only once after recovery is complete
|
||||
if (recoveryInitialized && !repositoryCleanupServiceStarted) {
|
||||
try {
|
||||
console.log('Starting repository cleanup service...');
|
||||
startRepositoryCleanupService();
|
||||
|
||||
// Register repository cleanup service shutdown callback
|
||||
registerShutdownCallback(async () => {
|
||||
console.log('🛑 Shutting down repository cleanup service...');
|
||||
stopRepositoryCleanupService();
|
||||
});
|
||||
|
||||
repositoryCleanupServiceStarted = true;
|
||||
} catch (error) {
|
||||
console.error('Failed to start repository cleanup service:', error);
|
||||
// Don't fail the request if repository cleanup service fails to start
|
||||
}
|
||||
}
|
||||
|
||||
// Continue with the request
|
||||
return next();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user