Composer Setup für REDAXO

Quell-ID: GitHub Discussion #4

Use Case

REDAXO-Projekte sollen mit Composer verwaltet werden, um AddOns und Abhängigkeiten zentral zu steuern und CI/CD-Prozesse zu ermöglichen.

Verwendete AddOns

  • REDAXO Core
  • Potentiell: Satis für eigenes Composer-Repository

Zielbeschreibung

Die REDAXO-Installation soll vollständig über Composer verwaltbar sein, inklusive Core- und AddOn-Updates.

Problemstellung

Aktuell gibt es einige Herausforderungen:

  1. Das Backend prüft Zugriffsrechte auf Ordner via Ajax
  2. AddOns haben keine standardisierte composer.json
  3. Es fehlt ein zentrales Composer-Repository für REDAXO-AddOns

Diskutierte Lösungsansätze

Variante 1: Datenbank-basiertes Update-Management

  • AddOn- und Core-Versionen in der Datenbank speichern
  • Update-Funktion für Benutzer mit entsprechenden Rechten
  • Konsolen-Befehl für CI/CD-Prozesse

Variante 2: Eigenes Composer-Repository

  • AddOns erhalten eine composer.json im Git-Repository
  • REDAXO-eigenes Composer-Repository via Satis
  • Ähnlich wie wpackagist.org für WordPress

Aktueller Stand

Die vollständige Composer-Integration ist ein längerfristiges Ziel der REDAXO-Entwicklung. Stand heute empfiehlt sich für Projekte mit Composer-Anforderungen:

Empfohlener Ansatz für aktuelle Projekte

{
    "name": "mein/redaxo-projekt",
    "require": {
        "php": ">=8.0"
    },
    "autoload": {
        "psr-4": {
            "Project\\": "redaxo/src/addons/project/lib/"
        }
    }
}

Alternative: Git Submodules

Für die Verwaltung von AddOns können Git Submodules verwendet werden:

git submodule add https://github.com/FriendsOfREDAXO/addon-name redaxo/src/addons/addon-name

Besserer Ansatz für die Zukunft

Die Community arbeitet an einer standardisierten Composer-Integration. Entwickler können ihre AddOns bereits jetzt vorbereiten:

  1. composer.json im AddOn-Root anlegen
  2. PSR-4 Autoloading konfigurieren
  3. Namespaces nach dem Schema FriendsOfRedaxo\AddonName verwenden

Weitere Informationen zur Namespace-Umstellung: Discussion #40