Vývoj

Vždy mluvte o funkcích, které chcete vyvinout, tím, že vytvoříte/najdete a okomentujete problém, který řeší váš problém, než na něm začnete pracovat, a informujte komunitu o tom, že začínáte kódovat tím, že problém prohlásíte za problém.

Žádost o stažení musí být provedena na větvi main.

Poznámka

Do března 2023 byly příspěvky prováděny na větvi develop. Tento postup je nyní zastaralý.

Předpoklad pro vytvoření tohoto zásuvného modulu

Doporučujeme seznámit se s následujícími pojmy:

  • Git
  • NodeJS
  • NPM
  • Typescript

Pro sestavení pluginu musíte mít následující balíčky:

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

Upozorňujeme, že tento zásuvný modul potřebuje pro server Prosody XMPP obrázek aplikace. Tento AppImage poskytuje vedlejší projekt Prosody AppImage. Skript build-prosody.sh stáhne binární soubory připojené k tomuto vzdálenému úložišti a zkontroluje, zda je jejich hashsum sha256 správný.

Vývoj

Klonujte úložiště, vytvořte zásuvný modul a vytvořte větev kódu:

# Klonování úložiště. Nezapomeňte na --recursive pro klonování podmodulů.
git clone https://github.com/JohnXLivingston/peertube-plugin-livechat.git --recursive

cd peertube-plugin-livechat

# Nainstalujte závislosti NPM a poprvé sestavte modul:
Npm install

# Sestavte zásuvný modul po úpravě:
npm run build

# Pokud máte fork z repozitáře, přidejte jej jako vzdálený (příklad):
git remote add me git@github.com:MY_GITHUB_ACCOUNT/peertube-plugin-livechat.git

# Vytvořte místní větev pro svůj vývoj a zkontrolujteji (příklad):
git checkout my_development # Poznámka: pokud je přidružena nějaká záležitost, použijte jako název větve fix_1234 (kde 1234 je číslo issue).
# Chcete-li navrhnout své úpravy, odešlete svou větev do úložiště (příklad):
git push --set-upstream me my_development
# Poté přejděte do svého úložiště github pomocí webového prohlížeče a navrhněte žádost o stažení (viz další pokyny níže).

Jakmile jste připraveni ukázat svůj kód a požádat o zpětnou vazbu, odešlete návrh žádosti o stažení. Jakmile jste připraveni na kontrolu kódu před sloučením, odešlete žádost o stažení. V každém případě prosíme o propojení vašeho PR s problémy, které řeší, pomocí syntaxe GitHubu: “fixes #issue_number”.

Kód front-endu je ve složce client, kód back-endu ve složce server. Ve složce shared je několik sdílených kódů.

Obecné pokyny (vývoj zásuvných modulů, sestavení, instalace, …) naleznete v dokumentaci Peertube.

Zásuvný modul můžete sestavit s dalšími funkcemi ladění jednoduše pomocí:

NODE_ENV=dev npm run build

Tento zásuvný modul je v souladu s REUSE: používá hlavičky SPDX k identifikaci licenčních informací svého zdrojového kódu. Více informací naleznete na webových stránkách REUSE. K aktualizaci hlaviček můžete použít nástroj příkazového řádku reuse. Příkaz npm run lint použije ke kontrole shody příkaz reuse. Nezapomeňte do hlaviček SPDX přidat informace o autorských právech, když upravujete nějaký kód.

ESBuild vs Typescript

Tento zásuvný modul používá ESBuild pro generování frontend kódu, stejně jako oficiální zásuvný modul peertube-plugin-quickstart. ESBuild si poradí s Typescriptem, ale nekontroluje typy (viz dokumentace ESBuild). Proto nejprve zkompilujeme Typescript s volbou -noEmit, jen abychom zkontrolovali typy (check:client:ts v souboru package.json). Pokud je vše v pořádku, spustíme ESBuild a vygenerujeme zkompilovaný javascript.

Režim ladění

Pro tento zásuvný modul existuje režim ladění, který zkracuje určité zpoždění. Například některé soubory protokolu se budou otáčet každé dvě minuty místo jednou denně. To umožňuje snadněji testovat některé akce, na které by se normálně čekalo hodiny nebo dny.

Pro zapnutí tohoto režimu stačí vytvořit soubor /var/www/peertube/storage/plugins/data/peertube-plugin-livechat/debug_mode (nahradit /var/www/peertube/storage/ správnou cestou ve vaší instalaci).

Ke spuštění režimu ladění stačí pouhá existence tohoto souboru. Chcete-li se ujistit, že je brán v úvahu, můžete restartovat instanci Peertube.

Tento soubor může obsahovat některé JSON, které umožňují pokročilejší možnosti. Seznam existujících parametrů naleznete v souboru server/lib/debug.ts. Po každé úpravě obsahu restartujte Peertube.

Varování

Tento režim nepovolujte na produkčním serveru, ani na veřejném serveru. Mohlo by to způsobit bezpečnostní problémy.

Restart Prosody

Když je povolen režim ladění, můžete pomocí tohoto volání API restartovat aplikaci Prosody: http://your_instance.tld/plugins/livechat/router/api/restart_prosody. Toto volání nepotřebuje žádné ověření. Lze jej provést z příkazového řádku, například pomocí příkazu curl http://your_instance.tld/plugins/livechat/router/api/restart_prosody.

Prosody debugger

Prosody AppImage je možné připojit ke vzdálenému debuggeru pomocí MobDebug.

Chcete-li tak učinit, musíte nastavit MobDebug ve složce, ke které má přístup uživatel peertube. Pak to přidejte do souboru debub_mode:

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

host a port jsou volitelné. debugger_path musí ukazovat na složku, kde je soubor .lua MobDebug.

Restartujte Peertube.

Spusťte svůj ladicí server.

Aby se Prosody připojil k debuggeru, zavolejte API http://your_instance.tld/plugins/livechat/router/api/restart_prosody?debugger=true. Tento hovor nevyžaduje žádné ověření. Lze to provést z příkazového řádku, například pomocí curl http://your_instance.tld/plugins/livechat/router/api/restart_prosody?debugger=true. Můžete dokonce nakonfigurovat svůj ladicí server tak, aby tento požadavek spouštěl automaticky.

Prosody se poté restartuje a připojí se k debuggeru.

Rychlé vývojářské prostředí pomocí Dockeru

Na [fóru Peertube] je výukový program ve francouzštině (https://framacolibri.org/t/tutoriel-creer-un-environnement-de-developpement-de-plugin-peertube-rapidement-en-utilisant-docker -et-qui-permet-de-tester-la-federation/17631), který vysvětluje, jak rychle vytvořit prostředí pro vývojáře pomocí Docker.

Bylo z toho vytvořeno repo, podívejte se na pt-plugin-dev.

Poznámka: Z neznámého důvodu nemůže Prosody rozlišit adresy DNS kontejnerů při použití knihovny lua-unbound. V pluginu je špinavý hack: stačí vytvořit soubor /data/plugins/data/peertube-plugin-livechat/no_lua_unbound ve vašem docker-volume a restartovat kontejnery.

Rychle znovu sestavte a nainstalujte plugin

Když provádíte úpravy, nemusíte vždy znovu sestavovat celý projekt a znovu instalovat plugin do vašeho vývojového prostředí. Můžete sestavit pouze upravenou součást (pokud jste například upravili pouze soubory klienta: npm spustit build:client). V souborech package.json vyhledejte dostupné skripty sestavení.

Pokud je zásuvný modul již nainstalován v instanci dev a nezměnili jste žádnou závislost, můžete rychle nainstalovat svou práci podle následujících kroků:

  • znovu sestavit potřebné části zásuvného modulu (klient, styly, …),
  • přepište obsah složky data/plugins/node_modules/peertube-plugin-livechat/dist/ ve své instanci dev obsahem složky dist pluginu,
  • změňte rekurzivně vlastníka souborů plugins/node_modules/peertube-plugin-livechat/dist/ na svého uživatele peertube,
  • restartujte instanci.

Výkonnostní testy

Úložiště livechat-perf-test obsahuje několik nástrojů pro provádění testů výkonu. Lze je použít k vyhodnocení vylepšení kódu nebo k nalezení úzkých míst.