Fassung 1.4.4: Migrationen im Browser, und ein Fehlschlag sagt warum
CMS quality / php (8.2) (push) Canceled after 0s
CMS quality / php (8.4) (push) Canceled after 0s
CMS quality / browser (push) Canceled after 0s
CMS quality / mysql (push) Canceled after 0s

Zwei Luecken, die erst das Veroeffentlichen von 1.4.3 gezeigt hat.

- Es gab keinen Weg, ausstehende Migrationen im Browser auszufuehren.
  Wer die Dateien per FTP hochlaedt - und das muss genau einmal jeder
  tun, dessen Installation die Updatekarte noch nicht kennt -, hatte
  danach neuen Code und eine alte Datenbank, und dafuer nur die
  Konsole. Also genau das, was auf geteiltem Hosting fehlt. Der
  Bildschirm "System" zeigt jetzt eine Karte, sobald etwas aussteht,
  nennt die Namen und fuehrt sie auf Knopfdruck aus.
- "Die Releaseseite antwortet nicht" waren drei Ursachen in einem
  Satz. Beim Gegenpruefen des frischen Releases holte der Updater von
  hier gar nichts - nicht weil die Leitung zu waere, sondern weil
  diesem PHP der Zertifikatsspeicher fehlt. Auf einem Webhosting ist
  das der haeufigste Grund und der einzige, den man in einer Minute
  behebt; er steht jetzt in der Meldung. Bei genau diesem Fehler wird
  zusaetzlich der Weg ueber den Dateizeiger versucht - damit
  funktioniert der Abruf auf diesem Rechner. Abgeschaltet wird die
  Pruefung nicht: ein Update ohne Zertifikatspruefung koennte
  unterwegs ausgetauscht worden sein.

Dazu der manuelle Weg Schritt fuer Schritt in docs/UPDATE.md und ein
Test, der beides festhaelt: dass die Karte auffaellt und dass nur ein
angemeldeter Administrator mit gueltigem Formular migrieren kann.

Geprueft: 431 Tests auf PHP 8.2 und 8.4, Editor-, Browser- und
Linkpruefung, Editor-Modelltests.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
kantarciandClaude Opus 5 committed 2026-09-13 23:15:37 +02:00
1 parent d6d476177a
commit 4153ba0f65
10 files changed
+304 -7

No files matched your search

+21
View File
@@ -195,9 +195,30 @@ final class ArchiveUpdateTest extends TestCase
$download = new Download();
foreach (['http://releases.example.invalid/a.zip', 'ftp://releases.example.invalid/a.zip', 'file:///etc/passwd', '/tmp/a.zip'] as $url) {
self::assertNull($download->get($url), $url.' darf nicht geholt werden.');
self::assertStringContainsString('HTTPS', $download->reason(), 'Und es muss dastehen, woran es lag.');
}
}
public function testAFailedDownloadSaysWhatWentWrong(): void
{
// Drei Ursachen sehen in der Verwaltung sonst gleich aus: kein Weg nach draußen, kein
// Zertifikatsspeicher, falsche Adresse. Die mittlere ist auf einem Webhosting die
// häufigste und in einer Minute behoben - wenn jemand sie liest.
$download = new Download(connectTimeout: 2, timeout: 5);
self::assertNull($download->get('https://kein-server.invalid/datei.zip'));
self::assertNotSame('', $download->reason(), 'Ein Fehlschlag ohne Grund ist eine Sackgasse.');
// Und der Weg durch den Updater: Die Meldung im Schritt trägt den Grund mit.
$this->releases->serve(self::API.'/releases/latest', json_encode(['tag_name' => 'v1.1.0']));
$this->releases->serve(sprintf('%s/v1.1.0/kantsites-1.1.0.zip.sha256', self::BASE), str_repeat('a', 64));
$ergebnis = $this->updater()->run();
self::assertFalse($ergebnis['ok']);
$gescheitert = $this->firstFailed($ergebnis);
self::assertSame('Archiv laden', $gescheitert['label']);
self::assertStringContainsString('herunterladen', $gescheitert['detail']);
}
public function testTheUpdaterReplacesEveryEntryTheReleaseArchiveShips(): void
{
// Der Fehler, der schon einmal auf dem Hosting aufgeschlagen ist, andersherum: Kommt eine