Ajoute les mises à jour autonomes
Les installations hors YunoHost peuvent désormais vérifier et installer une release Forgejo avec sauvegarde et retour arrière complet.
This commit is contained in:
parent
f41504c852
commit
53e79a72d7
25 changed files with 1146 additions and 61 deletions
|
|
@ -17,8 +17,16 @@ final class BackupService
|
|||
throw new RuntimeException(t('service.backup.directory_failed'));
|
||||
}
|
||||
$stamp = (new DateTimeImmutable('now', new DateTimeZone('Europe/Paris')))->format('Ymd-His');
|
||||
$suffix = $reason === 'pre-restore' ? '-avant-restauration' : '';
|
||||
$suffix = match ($reason) {
|
||||
'pre-restore' => '-avant-restauration',
|
||||
'pre-update' => '-avant-mise-a-jour',
|
||||
'pre-rollback' => '-avant-retour-arriere',
|
||||
default => '',
|
||||
};
|
||||
$target = $backupDir . '/globinours-' . $stamp . $suffix . '.zip';
|
||||
if (is_file($target)) {
|
||||
$target = $backupDir . '/globinours-' . $stamp . $suffix . '-' . bin2hex(random_bytes(2)) . '.zip';
|
||||
}
|
||||
// Certains volumes synchronisés acceptent les ZIP mais SQLite ne peut pas
|
||||
// y créer de base avec VACUUM INTO. Le snapshot transitoire appartient au
|
||||
// répertoire temporaire système ; seule l'archive finale va dans backups/.
|
||||
|
|
@ -85,7 +93,7 @@ final class BackupService
|
|||
{
|
||||
if (
|
||||
$name !== basename($name) ||
|
||||
!preg_match('/^globinours-[0-9]{8}-[0-9]{6}(?:-avant-restauration)?\.zip$/', $name)
|
||||
!preg_match('/^globinours-[0-9]{8}-[0-9]{6}(?:-avant-(?:restauration|mise-a-jour|retour-arriere))?(?:-[a-f0-9]{4})?\.zip$/', $name)
|
||||
) {
|
||||
return null;
|
||||
}
|
||||
|
|
@ -445,7 +453,15 @@ final class BackupService
|
|||
$files = glob($dir . '/globinours-*.zip') ?: [];
|
||||
usort($files, static fn($a, $b) => filemtime($b) <=> filemtime($a));
|
||||
$keep = class_exists(AppSettings::class) ? AppSettings::int('backup_retention', 1, 50) : 10;
|
||||
foreach (array_slice($files, $keep) as $file) {
|
||||
$regularKept = 0;
|
||||
foreach ($files as $file) {
|
||||
$protectedRollback =
|
||||
(str_contains(basename($file), '-avant-mise-a-jour') ||
|
||||
str_contains(basename($file), '-avant-retour-arriere')) &&
|
||||
time() - (filemtime($file) ?: 0) < 7 * 86400;
|
||||
if ($protectedRollback || ++$regularKept <= $keep) {
|
||||
continue;
|
||||
}
|
||||
@unlink($file);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue