Entwickeln

Sprechen Sie immer über die Funktionen, die Sie entwickeln wollen, indem Sie das Issue, das Ihr Problem behandelt, erstellen/finden und kommentieren bevor Sie mit der Arbeit daran beginnen und informieren Sie die Gemeinschaft darüber, dass Sie mit der Programmierung beginnen, indem Sie das Thema für sich beanspruchen.

Bitte benutzen Sie den main Zweig.

Anmerkung

Bis März 2023 wurden die Beiträge auf dem develop Zweig erstellt. Dieses Verfahren ist nun veraltet.

Voraussetzung für die Erstellung dieses Plugins

Es wird dringend empfohlen, mit den folgenden Konzepten vertraut zu sein:

  • Git
  • NodeJS
  • NPM
  • Typescript

Um das Plugin zu erstellen, benötigen Sie die folgenden Pakete:

  • git
  • npm (>=8.x)
  • nodejs (>=14.x)
  • build-essential
  • coreutils
  • wget
  • reuse

Bitte beachten Sie, dass dieses Plugin ein AppImage für den Prosody XMPP Server benötigt. Dieses AppImage wird vom Prosody AppImage Seitenprojekt bereitgestellt. Das Skript build-prosody.sh lädt Binärdateien herunter, die an dieses entfernte Repository angehängt sind, und überprüft, ob ihre sha256-Hashsumme korrekt ist.

Entwickeln

Klonen Sie das Repository, bauen Sie das Plugin, und erstellen Sie Ihren Feature-Zweig:

# Kopieren Sie das Repository. Vergessen Sie nicht die Option --recursive, um Submodule mit zu kopieren.
git clone https://github.com/JohnXLivingston/peertube-plugin-livechat.git --recursive

cd peertube-plugin-livechat

# Installieren Sie die NPM-Abhängigkeiten und erstellen Sie das Modul zum ersten Mal:
npm install

# Erstellen des Plugins nach einer Änderung:
npm run build

# Wenn Sie einen Fork aus dem Repository haben, fügen Sie ihn als Remote hinzu (Beispiel):
git remote add me git@github.com:MY_GITHUB_ACCOUNT/peertube-plugin-livechat.git

# Erstellen Sie einen lokalen Zweig für Ihre Entwicklungen und testen Sie ihn aus (Beispiel):
git checkout my_development # Hinweis: Wenn ein Github Problem damit verbunden ist, verwenden Sie fix_1234 als Zweigname (wobei 1234 die Nummer des Problems ist).
# Um Ihre Änderungen vorzuschlagen, schieben Sie Ihren Zweig in Ihr Repository (Beispiel):
git push --set-upstream me my_development
# Gehen Sie dann mit Ihrem Webbrowser zu Ihrem Github-Repository, um den Pull Request vorzuschlagen (siehe zusätzliche Anweisungen unten)

Sobald Sie bereit sind, Ihren Code zu zeigen und um Feedback zu bitten, reichen Sie einen Entwurf für einen Pull Request ein. Sobald Sie bereit für eine Codeüberprüfung vor der Zusammenführung sind, reichen Sie einen Pull Request ein. In jedem Fall sollten Sie Ihren PR mit dem Problem, die er behebt, verlinken, indem Sie die GitHub-Syntax verwenden: “fixes #issue_number”.

Der Front-End-Code befindet sich im Ordner client, der Back-End-Code im Ordner server. Es gibt einige gemeinsam genutzte Codes im shared Ordner.

Für allgemeine Anweisungen (Entwicklung von Plugins, Erstellung, Installation, …), lesen Sie bitte die Peertube Dokumentation.

Sie können das Plugin mit zusätzlichen Debug-Funktionen bauen, indem Sie es einfach benutzen:

NODE_ENV=dev npm run build

Dieses Plugin ist REUSE konform: Es verwendet SPDX-Header, um die Lizenzinformationen seines Quellcodes zu identifizieren. Weitere Informationen finden Sie auf der REUSE Website. Sie können das reuse Kommandozeilenwerkzeug verwenden, um die Header zu aktualisieren. Der Befehl npm run lint verwendet den Befehl reuse, um die Einhaltung zu überprüfen. Vergessen Sie nicht, Ihre Copyright-Informationen in die SPDX-Header einzufügen, wenn Sie Code ändern.

ESBuild vs Typescript

Dieses Plugin verwendet ESBuild für die Generierung von Frontend-Code, wie das offizielle peertube-plugin-quickstart Plugin. ESBuild kann mit Typescript umgehen, prüft aber keine Typen (siehe ESBuild-Dokumentation). Deshalb kompilieren wir Typescript zuerst mit der Option -noEmit, nur um die Typen zu überprüfen (check:client:ts in der package.json Datei). Dann, wenn alles in Ordnung ist, führen wir ESBuild aus, um das kompilierte Javascript zu erzeugen.

Debug Modus

Es gibt einen Debug Modus für dieses Plugin, der einige Verzögerungen verkürzt. Zum Beispiel werden einige Protokolldateien alle zwei Minuten erneuert, anstatt einmal pro Tag. Dies ermöglicht es, bestimmte Aktionen, für die man normalerweise Stunden oder Tage warten müsste, leichter zu testen.

Um diesen Modus zu aktivieren, müssen Sie lediglich die Datei /var/www/peertube/storage/plugins/data/peertube-plugin-livechat/debug_mode erstellen (ersetzen Sie /var/www/peertube/storage/ durch den richtigen Pfad Ihrer Installation).

Das einfache Vorhandensein dieser Datei reicht aus, um den Debug Modus zu aktivieren. Um sicherzustellen, dass sie berücksichtigt wird, können Sie Ihre Peertube Instanz neu starten.

Diese Datei kann einige JSON enthalten, um erweiterte Optionen zu ermöglichen. Eine Liste der vorhandenen Parameter finden Sie in server/lib/debug.ts. Starten Sie Peertube nach jeder Änderung des Inhalts neu.

Warnung

Aktivieren Sie diesen Modus nicht auf einem Produktionsserver und auch nicht auf einem öffentlichen Server. Dies könnte Sicherheitsprobleme verursachen.

Prosody neustarten

Wenn der Debug Modus aktiviert ist, können Sie Prosody mit diesem API-Aufruf neu starten: http://your_instance.tld/plugins/livechat/router/api/restart_prosody. Für diesen Aufruf ist keine Authentifizierung erforderlich. Er kann von einer Befehlszeile aus erfolgen, zum Beispiel mit curl http://your_instance.tld/plugins/livechat/router/api/restart_prosody.

Prosody Debugger

Es ist möglich, das Prosody AppImage mit Hilfe von MobDebug mit einem externen Debugger zu verbinden.

Dazu müssen Sie MobDebug in einem Ordner einrichten, auf den der Benutzer peertube zugreifen kann. Dann fügen Sie dies in der Datei debub_mode hinzu:

{
  "debug_prosody": {
    "debugger_path": "/der_pfad_zu_mobdebug/src",
    "host": "localhost",
    "port": "8172"
  }
}

host und port sind optional. debugger_path muss auf den Ordner zeigen, in dem sich die MobDebug .lua Datei befindet.

Peertube neustarten.

Starten Sie Ihren Debugger-Server.

Damit Prosody eine Verbindung mit dem Debugger herstellen kann, rufen Sie die API http://your_instance.tld/plugins/livechat/router/api/restart_prosody?debugger=true auf. Dieser Aufruf erfordert keine Authentifizierung. Er kann von einer Kommandozeile aus erfolgen, zum Beispiel mit curl http://your_instance.tld/plugins/livechat/router/api/restart_prosody?debugger=true. Sie können sogar Ihren Debug Server so konfigurieren, dass er diese Anfrage automatisch startet.

Prosody startet dann neu und verbindet sich mit dem Debugger.

Schnelle Entwicklungsumgebung mit Docker

Es gibt eine Anleitung in französischer Sprache auf dem le Peertube forum das erklärt, wie man schnell eine Entwicklungsumgebung mit Docker erstellt.

Es wurde ein Repo daraus gemacht, siehe pt-plugin-dev.

Hinweis: Aus einem unbekannten Grund kann Prosody die DNS-Adresse von Containern nicht auflösen, wenn die lua-unbound-Bibliothek verwendet wird. Es gibt einen unsaubere Lösung dafür im Plugin: Erstellen Sie einfach eine /data/plugins/data/peertube-plugin-livechat/no_lua_unbound Datei in deinen docker-volumes, dann starten Sie die Container neu.

Schnelles Neuerstellen und Installieren des Plugins

Wenn Sie Änderungen vornehmen, müssen Sie nicht immer das gesamte Projekt neu erstellen und das Plugin in Ihrer Entwicklungsumgebung neu installieren. Sie können nur den geänderten Teil bauen (zum Beispiel, wenn Sie nur die Client-Dateien geändert haben: npm run build:client). Prüfen Sie die package.json Dateien auf verfügbare Build-Skripte.

Wenn das Plugin bereits auf Ihrer Entwicklungsinstanz installiert ist und Sie keine Abhängigkeiten geändert haben, können Sie Ihre Arbeit schnell installieren, indem Sie diese Schritte ausführen:

  • die notwendigen Teile des Plugins (Client, Stile, …) neu zu erstellen,
  • den Inhalt von data/plugins/node_modules/peertube-plugin-livechat/dist/ Ihrer Dev-Instanz mit dem Inhalt des dist-Ordners des Plugins überschreiben,
  • rekursiv die Besitzerrechte der plugins/node_modules/peertube-plugin-livechat/dist/ Dateien auf Ihren peertube Benutzer ändern,
  • Ihre Instanz neustarten.

Leistungstests

Das livechat-perf-test Repository enthält einige Werkzeuge zur Durchführung von Leistungstests. Sie können verwendet werden, um Code-Verbesserungen zu bewerten oder Engpässe zu finden.