2024-09-19 13:27:42 +02:00
|
|
|
<?php
|
|
|
|
// Chemins de travail
|
|
|
|
$repoUrl = 'https://forge.chapril.org/api/v1/repos/ZwiiCMS-Team/ZwiiCMS'; // URL de l'API du dépôt
|
|
|
|
|
2024-09-19 20:34:57 +02:00
|
|
|
// Appels de fonctions
|
|
|
|
$latestVersion = getLatestTag($repoUrl);
|
2024-09-19 13:27:42 +02:00
|
|
|
|
2024-09-19 20:34:57 +02:00
|
|
|
// Comparer la version actuelle avec la dernière version
|
|
|
|
if (common::ZWII_VERSION === $latestVersion) {
|
|
|
|
echo "Aucune mise à jour nécessaire. Version actuelle : " . common::ZWII_VERSION . "\n";
|
2024-09-19 13:27:42 +02:00
|
|
|
exit;
|
|
|
|
}
|
|
|
|
|
2024-09-19 20:34:57 +02:00
|
|
|
// Récupérer les SHAs des commits associés aux tags
|
|
|
|
$fromSHA = getCommitSHAFromTag($repoUrl, common::ZWII_VERSION);
|
|
|
|
$toSHA = getCommitSHAFromTag($repoUrl, $latestVersion);
|
2024-09-19 13:27:42 +02:00
|
|
|
|
2024-09-19 20:34:57 +02:00
|
|
|
// Récupérer les commits entre les deux SHAs
|
|
|
|
$commits = getCommitsBetweenSHAs($repoUrl, $fromSHA, $toSHA);
|
2024-09-19 13:27:42 +02:00
|
|
|
|
2024-09-19 20:34:57 +02:00
|
|
|
// Lister les fichiers modifiés pour chaque commit
|
|
|
|
$modifiedFiles = getModifiedFiles($commits);
|
2024-09-19 13:27:42 +02:00
|
|
|
|
2024-09-19 20:34:57 +02:00
|
|
|
// Télécharger et mettre à jour les fichiers modifiés
|
2024-09-19 13:27:42 +02:00
|
|
|
foreach ($modifiedFiles as $file) {
|
|
|
|
$filePath = $file['filename'];
|
|
|
|
$fileUrl = "https://forge.chapril.org/ZwiiCMS-Team/ZwiiCMS/raw/$latestVersion/$filePath";
|
|
|
|
$localPath = __DIR__ . '/' . $filePath;
|
|
|
|
|
|
|
|
// Créer le dossier si nécessaire
|
|
|
|
if (!is_dir(dirname($localPath))) {
|
|
|
|
mkdir(dirname($localPath), 0755, true);
|
|
|
|
}
|
|
|
|
|
2024-09-19 20:34:57 +02:00
|
|
|
// Télécharger et remplacer le fichier, avec gestion des erreurs
|
|
|
|
$fileContent = file_get_contents($fileUrl);
|
|
|
|
if ($fileContent === false) {
|
|
|
|
echo "Erreur lors du téléchargement de : $filePath\n";
|
|
|
|
continue; // Passer au fichier suivant en cas d'erreur
|
|
|
|
}
|
|
|
|
file_put_contents($localPath, $fileContent);
|
2024-09-19 13:27:42 +02:00
|
|
|
echo "Mise à jour de : $filePath\n";
|
|
|
|
|
|
|
|
// Gérer la suppression de fichiers (si marqué comme supprimé dans le commit)
|
|
|
|
if ($file['status'] === 'removed' && file_exists($localPath)) {
|
|
|
|
unlink($localPath);
|
|
|
|
echo "Suppression de : $filePath\n";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
echo "Mise à jour terminée vers la version : $latestVersion\n";
|
2024-09-19 20:34:57 +02:00
|
|
|
|
|
|
|
// Fonctions
|
|
|
|
/**
|
|
|
|
* Récupère le dernier tag du dépôt.
|
|
|
|
*/
|
|
|
|
function getLatestTag($repoUrl) {
|
|
|
|
$tagsUrl = $repoUrl . '/tags';
|
|
|
|
$tags = json_decode(file_get_contents($tagsUrl), true);
|
|
|
|
|
|
|
|
if (!$tags || empty($tags)) {
|
|
|
|
die('Impossible de récupérer les tags.');
|
|
|
|
}
|
|
|
|
|
|
|
|
// Retourne le nom du dernier tag
|
|
|
|
return $tags[0]['name'];
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Récupère le SHA du commit lié à un tag spécifique.
|
|
|
|
*/
|
|
|
|
function getCommitSHAFromTag($repoUrl, $tag) {
|
|
|
|
$tagsUrl = $repoUrl . '/tags';
|
|
|
|
$tags = json_decode(file_get_contents($tagsUrl), true);
|
|
|
|
|
|
|
|
if (!$tags || empty($tags)) {
|
|
|
|
die('Impossible de récupérer les tags.');
|
|
|
|
}
|
|
|
|
|
|
|
|
foreach ($tags as $tagInfo) {
|
|
|
|
if ($tagInfo['name'] === $tag) {
|
|
|
|
return $tagInfo['commit']['sha'];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
die('Tag non trouvé : ' . $tag);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Récupère les commits entre deux SHAs spécifiques.
|
|
|
|
*/
|
|
|
|
function getCommitsBetweenSHAs($repoUrl, $fromSHA, $toSHA) {
|
|
|
|
$compareUrl = $repoUrl . "/compare/$fromSHA...$toSHA";
|
|
|
|
$compare = json_decode(file_get_contents($compareUrl), true);
|
|
|
|
|
|
|
|
if (!$compare || !isset($compare['commits']) || empty($compare['commits'])) {
|
|
|
|
die('Impossible de récupérer les commits ou fichiers modifiés.');
|
|
|
|
}
|
|
|
|
|
|
|
|
return $compare['commits'];
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Extrait les fichiers modifiés depuis une liste de commits.
|
|
|
|
*/
|
|
|
|
function getModifiedFiles($commits) {
|
|
|
|
$modifiedFiles = [];
|
|
|
|
foreach ($commits as $commit) {
|
|
|
|
$commitUrl = $commit['url'];
|
|
|
|
$commitDetails = json_decode(file_get_contents($commitUrl), true);
|
|
|
|
|
|
|
|
if (isset($commitDetails['files'])) {
|
|
|
|
foreach ($commitDetails['files'] as $file) {
|
|
|
|
$modifiedFiles[] = $file;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return $modifiedFiles;
|
|
|
|
}
|
2024-09-19 13:27:42 +02:00
|
|
|
?>
|