autoupdate ok
This commit is contained in:
parent
25c8016e07
commit
50f1a8cb6e
@ -3,101 +3,75 @@
|
|||||||
error_reporting(E_ALL);
|
error_reporting(E_ALL);
|
||||||
ini_set('display_errors', 1);
|
ini_set('display_errors', 1);
|
||||||
|
|
||||||
|
// Définir le fichier de journalisation
|
||||||
|
$logFile = 'update_log.txt';
|
||||||
|
|
||||||
// Chemins de travail
|
// Chemins de travail
|
||||||
$repoUrl = 'https://forge.chapril.org/api/v1/repos/ZwiiCMS-Team/ZwiiCMS'; // URL de l'API du dépôt
|
$repoUrl = 'https://forge.chapril.org/api/v1/repos/ZwiiCMS-Team/ZwiiCMS'; // URL de l'API du dépôt
|
||||||
$siteRoot = "."; // Racine du site (répertoire actuel)
|
$siteRoot = "."; // Racine du site (répertoire actuel)
|
||||||
|
|
||||||
echo "<p>Début du script de mise à jour...</p>";
|
// Afficher le champ HTML pour les logs
|
||||||
|
echo '<textarea id="logOutput" readonly style="width: 100%; height: 300px;"></textarea>';
|
||||||
flush(); ob_flush();
|
flush(); ob_flush();
|
||||||
|
|
||||||
// Appels de fonctions
|
// Appels de fonctions
|
||||||
echo "<p>Récupération du dernier tag...</p>";
|
logMessage("Début du script de mise à jour...");
|
||||||
flush(); ob_flush();
|
logMessage("Récupération du dernier tag...");
|
||||||
$latestVersion = getLatestTag($repoUrl);
|
$latestVersion = getLatestTag($repoUrl);
|
||||||
echo "<p>Dernier tag récupéré : $latestVersion</p>";
|
logMessage("Dernier tag récupéré : $latestVersion");
|
||||||
flush(); ob_flush();
|
|
||||||
|
|
||||||
// Comparer la version actuelle avec la dernière version
|
// Comparer la version actuelle avec la dernière version
|
||||||
if (common::ZWII_VERSION === $latestVersion) {
|
if (common::ZWII_VERSION === $latestVersion) {
|
||||||
echo "<p>Aucune mise à jour nécessaire. Version actuelle : " . common::ZWII_VERSION . "</p>";
|
logMessage("Aucune mise à jour nécessaire. Version actuelle : " . common::ZWII_VERSION);
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
echo "<p>Récupération des SHAs des commits associés aux tags...</p>";
|
logMessage("Récupération des SHAs des commits associés aux tags...");
|
||||||
flush(); ob_flush();
|
|
||||||
$fromSHA = getCommitSHAFromTag($repoUrl, common::ZWII_VERSION);
|
$fromSHA = getCommitSHAFromTag($repoUrl, common::ZWII_VERSION);
|
||||||
$toSHA = getCommitSHAFromTag($repoUrl, $latestVersion);
|
$toSHA = getCommitSHAFromTag($repoUrl, $latestVersion);
|
||||||
echo "<p>SHA de départ : $fromSHA, SHA de fin : $toSHA</p>";
|
logMessage("SHA de départ : $fromSHA, SHA de fin : $toSHA");
|
||||||
flush(); ob_flush();
|
|
||||||
|
|
||||||
// Récupérer les commits entre les deux SHAs sans utiliser /compare endpoint
|
logMessage("Récupération des commits entre les deux SHAs...");
|
||||||
echo "<p>Récupération des commits entre les deux SHAs...</p>";
|
|
||||||
flush(); ob_flush();
|
|
||||||
$commits = getCommitsManually($repoUrl, $fromSHA, $toSHA);
|
$commits = getCommitsManually($repoUrl, $fromSHA, $toSHA);
|
||||||
echo "<p>Nombre de commits récupérés : " . count($commits) . "</p>";
|
logMessage("Nombre de commits récupérés : " . count($commits));
|
||||||
flush(); ob_flush();
|
|
||||||
|
|
||||||
// Extraction des fichiers modifiés pour limiter les traitements
|
logMessage("Extraction des fichiers modifiés...");
|
||||||
echo "<p>Extraction des fichiers modifiés...</p>";
|
|
||||||
flush(); ob_flush();
|
|
||||||
$modifiedFiles = getModifiedFiles($commits);
|
$modifiedFiles = getModifiedFiles($commits);
|
||||||
echo "<p>Nombre de fichiers modifiés à traiter : " . count($modifiedFiles) . "</p>";
|
logMessage("Nombre de fichiers modifiés à traiter : " . count($modifiedFiles));
|
||||||
flush(); ob_flush();
|
|
||||||
|
|
||||||
// Télécharger et mettre à jour les fichiers modifiés
|
// Télécharger et mettre à jour les fichiers modifiés
|
||||||
foreach ($modifiedFiles as $file) {
|
foreach ($modifiedFiles as $file) {
|
||||||
// Vérifier le statut du fichier et traiter uniquement les fichiers ajoutés ou modifiés
|
|
||||||
if (!in_array($file['status'], ['modified', 'added'])) {
|
if (!in_array($file['status'], ['modified', 'added'])) {
|
||||||
continue; // Ignorer les fichiers non pertinents
|
continue; // Ignorer les fichiers non pertinents
|
||||||
}
|
}
|
||||||
|
|
||||||
$filePath = $file['filename'];
|
$filePath = $file['filename'];
|
||||||
$fileUrl = "https://forge.chapril.org/ZwiiCMS-Team/ZwiiCMS/raw/$latestVersion/$filePath";
|
$fileUrl = "https://forge.chapril.org/ZwiiCMS-Team/ZwiiCMS/raw/$latestVersion/$filePath";
|
||||||
$localPath = $siteRoot . '/' . $filePath; // Enregistrer à la racine du site
|
$localPath = $siteRoot . '/' . $filePath;
|
||||||
|
|
||||||
echo "<p>Mise à jour du fichier : $filePath</p>";
|
logMessage("Mise à jour du fichier : $filePath");
|
||||||
flush(); ob_flush();
|
|
||||||
|
|
||||||
// Comparer les dates de modification des fichiers pour éviter les copies inutiles
|
if (!is_dir(dirname($localPath))) {
|
||||||
if (file_exists($localPath)) {
|
logMessage("Création du dossier : " . dirname($localPath));
|
||||||
$localModifiedTime = filemtime($localPath);
|
if (!mkdir(dirname($localPath), 0755, true)) {
|
||||||
$remoteHeaders = get_headers($fileUrl, 1);
|
logMessage("Erreur lors de la création du dossier : " . dirname($localPath));
|
||||||
if (isset($remoteHeaders['Last-Modified'])) {
|
continue;
|
||||||
$remoteModifiedTime = strtotime($remoteHeaders['Last-Modified']);
|
|
||||||
if ($localModifiedTime >= $remoteModifiedTime) {
|
|
||||||
echo "<p>Fichier déjà à jour : $filePath, aucune copie nécessaire.</p>";
|
|
||||||
flush(); ob_flush();
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Créer le dossier si nécessaire
|
$fileContent = file_get_contents($fileUrl);
|
||||||
if (!is_dir(dirname($localPath))) {
|
|
||||||
echo "<p>Création du dossier : " . dirname($localPath) . "</p>";
|
|
||||||
flush(); ob_flush();
|
|
||||||
mkdir(dirname($localPath), 0755, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Télécharger et remplacer le fichier, avec gestion des erreurs
|
|
||||||
$fileContent = @file_get_contents($fileUrl);
|
|
||||||
if ($fileContent === false) {
|
if ($fileContent === false) {
|
||||||
echo "<p>Erreur lors du téléchargement de : $filePath</p>";
|
logMessage("Erreur lors du téléchargement de : $fileUrl");
|
||||||
flush(); ob_flush();
|
continue;
|
||||||
continue; // Passer au fichier suivant en cas d'erreur
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Écrire le contenu du fichier
|
|
||||||
if (file_put_contents($localPath, $fileContent) === false) {
|
if (file_put_contents($localPath, $fileContent) === false) {
|
||||||
echo "<p>Erreur lors de l'écriture de : $localPath</p>";
|
logMessage("Erreur lors de l'écriture de : $localPath");
|
||||||
flush(); ob_flush();
|
|
||||||
} else {
|
} else {
|
||||||
echo "<p>Mise à jour effectuée de : $filePath</p>";
|
logMessage("Mise à jour effectuée de : $filePath");
|
||||||
flush(); ob_flush();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Gérer la suppression des fichiers marqués comme supprimés dans les commits
|
|
||||||
foreach ($modifiedFiles as $file) {
|
foreach ($modifiedFiles as $file) {
|
||||||
if ($file['status'] === 'removed') {
|
if ($file['status'] === 'removed') {
|
||||||
$filePath = $file['filename'];
|
$filePath = $file['filename'];
|
||||||
@ -105,34 +79,42 @@ foreach ($modifiedFiles as $file) {
|
|||||||
|
|
||||||
if (file_exists($localPath)) {
|
if (file_exists($localPath)) {
|
||||||
if (unlink($localPath)) {
|
if (unlink($localPath)) {
|
||||||
echo "<p>Suppression du fichier : $filePath</p>";
|
logMessage("Suppression du fichier : $filePath");
|
||||||
} else {
|
} else {
|
||||||
echo "<p>Erreur lors de la suppression de : $filePath</p>";
|
logMessage("Erreur lors de la suppression de : $filePath");
|
||||||
}
|
}
|
||||||
flush(); ob_flush();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
echo "<p>Mise à jour terminée vers la version : $latestVersion</p>";
|
logMessage("Mise à jour terminée vers la version : $latestVersion");
|
||||||
flush(); ob_flush();
|
|
||||||
|
|
||||||
// Fonctions
|
// Fonctions
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fonction pour journaliser et afficher les messages
|
||||||
|
*/
|
||||||
|
function logMessage($message) {
|
||||||
|
global $logFile;
|
||||||
|
// Ajouter le message dans le fichier de log
|
||||||
|
file_put_contents($logFile, $message . PHP_EOL, FILE_APPEND);
|
||||||
|
// Afficher le message dans le champ HTML
|
||||||
|
echo "<script>document.getElementById('logOutput').value += `$message\n`;</script>";
|
||||||
|
flush(); ob_flush(); // Forcer l'affichage immédiat
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Récupère le dernier tag du dépôt.
|
* Récupère le dernier tag du dépôt.
|
||||||
*/
|
*/
|
||||||
function getLatestTag($repoUrl) {
|
function getLatestTag($repoUrl) {
|
||||||
$tagsUrl = $repoUrl . '/tags';
|
$tagsUrl = $repoUrl . '/tags';
|
||||||
echo "<p>Accès à l'URL des tags : $tagsUrl</p>";
|
logMessage("Accès à l'URL des tags : $tagsUrl");
|
||||||
flush(); ob_flush();
|
|
||||||
$tags = json_decode(file_get_contents($tagsUrl), true);
|
$tags = json_decode(file_get_contents($tagsUrl), true);
|
||||||
|
|
||||||
if (!$tags || empty($tags)) {
|
if (!$tags || empty($tags)) {
|
||||||
die("<p>Impossible de récupérer les tags.</p>");
|
die("Impossible de récupérer les tags.");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Retourne le nom du dernier tag
|
|
||||||
return $tags[0]['name'];
|
return $tags[0]['name'];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -141,68 +123,58 @@ function getLatestTag($repoUrl) {
|
|||||||
*/
|
*/
|
||||||
function getCommitSHAFromTag($repoUrl, $tag) {
|
function getCommitSHAFromTag($repoUrl, $tag) {
|
||||||
$tagsUrl = $repoUrl . '/tags';
|
$tagsUrl = $repoUrl . '/tags';
|
||||||
echo "<p>Récupération des SHAs depuis l'URL : $tagsUrl</p>";
|
logMessage("Récupération des SHAs depuis l'URL : $tagsUrl");
|
||||||
flush(); ob_flush();
|
|
||||||
$tags = json_decode(file_get_contents($tagsUrl), true);
|
$tags = json_decode(file_get_contents($tagsUrl), true);
|
||||||
|
|
||||||
if (!$tags || empty($tags)) {
|
if (!$tags || empty($tags)) {
|
||||||
die("<p>Impossible de récupérer les tags.</p>");
|
die("Impossible de récupérer les tags.");
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($tags as $tagInfo) {
|
foreach ($tags as $tagInfo) {
|
||||||
if ($tagInfo['name'] === $tag) {
|
if ($tagInfo['name'] === $tag) {
|
||||||
echo "<p>SHA trouvé pour le tag $tag : " . $tagInfo['commit']['sha'] . "</p>";
|
logMessage("SHA trouvé pour le tag $tag : " . $tagInfo['commit']['sha']);
|
||||||
flush(); ob_flush();
|
|
||||||
return $tagInfo['commit']['sha'];
|
return $tagInfo['commit']['sha'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
die("<p>Tag non trouvé : $tag</p>");
|
die("Tag non trouvé : $tag");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Récupère manuellement les commits entre deux SHAs en utilisant l'API des commits, avec gestion de la pagination.
|
* Récupère manuellement les commits entre deux SHAs avec pagination.
|
||||||
*/
|
*/
|
||||||
function getCommitsManually($repoUrl, $fromSHA, $toSHA) {
|
function getCommitsManually($repoUrl, $fromSHA, $toSHA) {
|
||||||
$commits = [];
|
$commits = [];
|
||||||
$page = 1;
|
$page = 1;
|
||||||
$perPage = 100;
|
$perPage = 100;
|
||||||
|
|
||||||
echo "<p>Début de la récupération des commits depuis $toSHA jusqu'à $fromSHA...</p>";
|
logMessage("Début de la récupération des commits depuis $toSHA jusqu'à $fromSHA...");
|
||||||
flush(); ob_flush();
|
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
$commitsUrl = "$repoUrl/commits?sha=$toSHA&per_page=$perPage&page=$page";
|
$commitsUrl = "$repoUrl/commits?sha=$toSHA&per_page=$perPage&page=$page";
|
||||||
echo "<p>Accès à l'URL des commits : $commitsUrl</p>";
|
logMessage("Accès à l'URL des commits : $commitsUrl");
|
||||||
flush(); ob_flush();
|
|
||||||
$response = json_decode(file_get_contents($commitsUrl), true);
|
$response = json_decode(file_get_contents($commitsUrl), true);
|
||||||
|
|
||||||
if (!$response || empty($response)) {
|
if (!$response || empty($response)) {
|
||||||
echo "<p>Aucune autre page disponible, fin de récupération.</p>";
|
logMessage("Aucune autre page disponible, fin de récupération.");
|
||||||
flush(); ob_flush();
|
break;
|
||||||
break; // Arrête si aucune autre page de commits n'est disponible
|
|
||||||
}
|
}
|
||||||
|
|
||||||
echo "<p>Commits récupérés sur la page $page : " . count($response) . "</p>";
|
logMessage("Commits récupérés sur la page $page : " . count($response));
|
||||||
flush(); ob_flush();
|
|
||||||
|
|
||||||
foreach ($response as $commit) {
|
foreach ($response as $commit) {
|
||||||
echo "<p>SHA récupéré : " . $commit['sha'] . "</p>";
|
logMessage("SHA récupéré : " . $commit['sha']);
|
||||||
flush(); ob_flush();
|
|
||||||
$commits[] = $commit;
|
$commits[] = $commit;
|
||||||
if ($commit['sha'] === $fromSHA) {
|
if ($commit['sha'] === $fromSHA) {
|
||||||
echo "<p>SHA de départ trouvé : $fromSHA</p>";
|
logMessage("SHA de départ trouvé : $fromSHA");
|
||||||
flush(); ob_flush();
|
|
||||||
// Arrêter la récupération une fois qu'on atteint le SHA de départ
|
|
||||||
return $commits;
|
return $commits;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Passe à la page suivante
|
|
||||||
$page++;
|
$page++;
|
||||||
}
|
}
|
||||||
|
|
||||||
die("<p>Impossible de trouver le SHA de départ dans les commits récupérés.</p>");
|
die("Impossible de trouver le SHA de départ dans les commits récupérés.");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -211,15 +183,13 @@ function getCommitsManually($repoUrl, $fromSHA, $toSHA) {
|
|||||||
function getModifiedFiles($commits) {
|
function getModifiedFiles($commits) {
|
||||||
$modifiedFiles = [];
|
$modifiedFiles = [];
|
||||||
foreach ($commits as $commit) {
|
foreach ($commits as $commit) {
|
||||||
echo "<p>Extraction des fichiers modifiés pour le commit : " . $commit['sha'] . "</p>";
|
logMessage("Extraction des fichiers modifiés pour le commit : " . $commit['sha']);
|
||||||
flush(); ob_flush();
|
|
||||||
$commitUrl = $commit['url'];
|
$commitUrl = $commit['url'];
|
||||||
$commitDetails = json_decode(file_get_contents($commitUrl), true);
|
$commitDetails = json_decode(file_get_contents($commitUrl), true);
|
||||||
|
|
||||||
if (isset($commitDetails['files'])) {
|
if (isset($commitDetails['files'])) {
|
||||||
foreach ($commitDetails['files'] as $file) {
|
foreach ($commitDetails['files'] as $file) {
|
||||||
echo "<p>Fichier modifié trouvé : " . $file['filename'] . " (status: " . $file['status'] . ")</p>";
|
logMessage("Fichier modifié trouvé : " . $file['filename'] . " (status: " . $file['status'] . ")");
|
||||||
flush(); ob_flush();
|
|
||||||
$modifiedFiles[] = $file;
|
$modifiedFiles[] = $file;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user