feat : versionnage semver, migrations contenu, bandeau mise à jour admin
- CHANGELOG.md : structure semver (1.0.0 / 1.1.0 / 1.2.0) remplace le journal non versionné - public/version.txt : généré à chaque push depuis la première entrée CHANGELOG - scripts/push.sh : extrait la version CHANGELOG avant git add - src/UpdateChecker.php : compare version déployée vs version Gitea (raw file), cache 1 h - templates/layout.php : bandeau alerte admin (nouvelle version / migrations en attente) - templates/admin.php : dashboard moteur Folio (version déployée / disponible) - scripts/migrate_content.php + migration_001 : ajout # titre dans les articles existants - templates/maintenance.php : page HTTP 503 pendant une migration - src/helpers.php : extractMarkdownTitle(), normalisation \r\n dans lineDiff() - templates/wizard/step1.php : suppression champ titre, plan TOC dynamique - public/assets/js/wizard.js : scope titleEl, scrollToCursor, buildToc, handlers externalisés Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
// Migration 001 : préfixe chaque article avec `# Titre` si aucun titre
|
||||
// Markdown de niveau 1 n'est déjà présent dans le contenu.
|
||||
//
|
||||
// Variables disponibles depuis le runner : $dataDir
|
||||
|
||||
/** @var string $dataDir */
|
||||
|
||||
$updated = 0;
|
||||
$skipped = 0;
|
||||
|
||||
foreach (glob($dataDir . '/*/meta.json') as $metaPath) {
|
||||
$dir = dirname($metaPath);
|
||||
$mdPath = $dir . '/index.md';
|
||||
|
||||
if (!file_exists($mdPath)) {
|
||||
$skipped++;
|
||||
continue;
|
||||
}
|
||||
|
||||
$meta = json_decode((string) file_get_contents($metaPath), true);
|
||||
if (!is_array($meta)) {
|
||||
$skipped++;
|
||||
continue;
|
||||
}
|
||||
|
||||
$title = trim($meta['title'] ?? '');
|
||||
$content = (string) file_get_contents($mdPath);
|
||||
$content = str_replace("\r\n", "\n", $content);
|
||||
|
||||
// Déjà un titre Markdown niveau 1 → on ne touche pas
|
||||
if (preg_match('/^\s*#\s+\S/', $content)) {
|
||||
$skipped++;
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($title === '') {
|
||||
$skipped++;
|
||||
continue;
|
||||
}
|
||||
|
||||
file_put_contents($mdPath, '# ' . $title . "\n\n" . ltrim($content));
|
||||
$updated++;
|
||||
}
|
||||
|
||||
echo " $updated article(s) mis à jour, $skipped ignoré(s)\n";
|
||||
Reference in New Issue
Block a user