Files
KantSites/src/Ops/Tasks/UpdateCheckTask.php
T
kantarciandClaude Opus 5 05ea703655
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
Fassung 1.6.0: der Aufgabenplan wird veroeffentlicht
Wiederkehrende Aufgaben ohne Cronjob (ADR 073): Sicherung, Statistik kuerzen,
geplante Veroeffentlichung, Updatepruefung und Aufraeumen laufen als Plan in
der Tabelle scheduled_task - eine Zeile je Aufgabe mit Faelligkeit, Sperre und
letztem Ergebnis. Auf geteiltem Hosting gibt es oft keinen Cronjob; der Plan
haengt stattdessen an Anfragen und an einem Takt aus dem geoeffneten Backend.

Diese Arbeit entstand in einer parallel laufenden Sitzung und lag bis hierher
unveroeffentlicht im Arbeitsverzeichnis: die Releases 1.5.0 bis 1.5.5 wurden
bewusst aus dem jeweiligen Tag gebaut und enthielten sie deshalb nicht.

Vor der Veroeffentlichung geprueft, nicht bloss eingepackt:

- phpunit 452/452, npm test 28/28, npm run test:editor vollstaendig.
- Die Migration 20260914000100 legt nur die Tabelle scheduled_task an und nimmt
  sie beim Zurueckrollen wieder weg. Sie fasst keine bestehenden Daten an.
- Seit einer Stunde keine Schreibzugriffe der anderen Sitzung mehr.

Dabei zwei Fehler behoben:

- config/services.yaml verwendet !tagged_iterator. Das ist gueltiges Symfony,
  aber "lint:yaml config" kennt eigene Tags nur mit --parse-tags und gab 1
  zurueck - der CI-Lauf waere daran gescheitert. Flag ergaenzt.
- AdminHeadersSubscriber.php (aus 1.5.3) entsprach nicht dem Stil von
  php-cs-fixer; composer lint gab 8 zurueck. Behoben.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-14 08:30:13 +02:00

58 lines
1.7 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
namespace App\Ops\Tasks;
use App\Ops\ArchiveUpdate;
use App\Ops\Updater;
/**
* Fragt einmal täglich, ob es eine neuere Fassung gibt.
*
* Sie prüft nur und installiert nichts. Ein Update tauscht Dateien und führt Migrationen aus;
* das gehört an einen Knopf, den ein Mensch drückt, und nicht in den Seitenaufruf eines
* Besuchers.
*
* Ist die Fassungsliste nicht erreichbar, ist das ein Fehler und keine Entwarnung: „keine
* Antwort" und „kein Update" sehen sonst gleich aus, und das eine ist eine Nachricht, das andere
* eine ausgefallene Prüfung.
*/
final class UpdateCheckTask implements Task
{
public function __construct(private ArchiveUpdate $archive, private Updater $updater)
{
}
public function name(): string
{
return 'update-check';
}
public function label(): string
{
return 'Nach Updates sehen';
}
public function explanation(): string
{
return 'Fragt beim Repository nach der neuesten Fassung. Sie installiert nichts – das Ergebnis steht hier und auf dem Bildschirm „System".';
}
public function interval(): int
{
return 86400;
}
public function run(): string
{
$latest = $this->archive->latest();
if (null === $latest) {
throw new \RuntimeException('Die Fassungsliste war nicht erreichbar. Erlaubt dieses Hosting ausgehende Verbindungen?');
}
$installed = $this->updater->version();
return version_compare($latest['version'], $installed, '>')
? sprintf('Fassung %s ist verfügbar; installiert ist %s.', $latest['version'], $installed)
: sprintf('Aktuell: Fassung %s.', $installed);
}
}