Desarrollar

Hable siempre sobre las características que desea desarrollar al crear/encontrar y comentar la cuestión que aborda su problema antes de empezar a trabajar en él, e informe a la comunidad que comienza a codificar reclamando el problema.

Un Pull Request se debe solicitar en la rama main.

Nota

Hasta marzo de 2023, las contribuciones se hacían en la rama develop. Esto ya es obsoleto.

Requisito previo para construir este plugin

Es muy recomendable el familiarizarse con los siguientes conceptos:

  • Git
  • NodeJS
  • NPM
  • TypeScript

Para generar el plugin, debe tener los siguientes paquetes:

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

Tenga en cuenta que este plugin necesita una AppImage para el servidor Prosody XMPP. Esa AppImage la proporciona el proyecto paralelo Prosody AppImage. El script build-prosody.sh descarga los binarios adjuntos de ese repositorio remoto y verifica que sus checksum sha256 sean correctos.

Desarrollar

Clona el repositorio, genera el plugin y crea tu rama de características:

# Clona el repositorio. No olvides el --recursive para clonar submódulos.
git clone https://github.com/JohnXLivingston/peertube-plugin-livechat.git --recursive

cd peertube-plugin-livechat

# Instala las dependencias de NPM y construye el módulo por primera vez:
npm install

# Construir el plugin después de una modificación:
npm run build

# Si tienes un fork del repositorio, añádelo como remoto (ejemplo):
git remote add me git@github.com:MY_GITHUB_ACCOUNT/peertube-plugin-livechat.git

# Crea una rama local para tus desarrollos, haz checkout para ello (ejemplo):
git checkout mi_desarrollo # Nota: si hay una incidencia asociada, usa fix_1234 como nombre de tu rama (donde 1234 es el número de la incidencia)
# Para enviar tus modificaciones, haz un push de tu rama a tu repositorio (ejemplo):
git push --set-upstream me mi_desarrollo
# Dirijete a tu repositorio github con tu navegador web para abrir una solicitud de incorporación de cambios Pull Request (ver instrucciones adicionales más abajo)

Una vez que esté listo para mostrar su código y desea solicitar comentarios, envíe un borrador de solicitud de incorporación de cambios. Una vez que esté listo para una revisión de código antes de la fusión, envíe una solicitud de incorporación de cambios. En cualquier caso, vincule su PR a los problemas que resuelve utilizando la sintaxis de GitHub: “fixes #issue_number”.

El código front-end se sitúa en el directorio client, el back-end en server. Hay código compartido en el directorio shared.

Para obtener instrucciones generales (desarrollo de plugins, generación, instalación, …), consulte la página Peertube documentation.

Puede generar el plugin con características adicionales de depuración simplemente usando:

NODE_ENV=dev npm run build

This plugin is REUSE compliant: it uses SPDX headers to identify licensing information of its source code. More information on the REUSE website. You can use the reuse command line tool to help you update headers. The npm run lint command will use the reuse command to check compliance. Don’t forget to add your copyright information in SPDX headers when you modify some code.

ESBuild vs Typescript

Este plugin utiliza ESBuild para la generación de código frontend, al igual que el plugin oficial peertube-plugin-quickstart. ESBuild puede manejar TypeScript, pero no verifica los tipos (ver documentación de ESBuild). Por ello primero compilamos TypeScript con la opción -noEmit, sólo para la verificación de los tipos (check:client:ts en el fichero package.json). Luego, si todo está bien, ejecutamos ESBuild para generar el javascript compilado.

Modo depuración

Hay un modo de depuración para este plugin, que acorta ciertos retrasos. Por ejemplo, algunos logs rotarán cada dos minutos, en lugar de una vez al día. Esto permite probar más fácilmente ciertas acciones, para las que se podría tomar horas o días de espera.

Para habilitar este modo, solo tiene que crear el archivo /var/www/peertube/storage/plugins/data/peertube-plugin-livechat/debug_mode (reemplazando /var/www/peertube/storage/ por la ruta correcta de su instalación).

La simple existencia de este archivo es suficiente para activar el modo de depuración. Para asegurarte de que se toma en cuenta, puedes reiniciar tu instancia de Peertube.

Este archivo puede contener JSON para habilitar opciones más avanzadas. Para tener una lista de los parámetros existentes, consulte server/lib/debug.ts. Reinicie Peertube después de cada modificación de su contenido.

Aviso

No habilites este modo en un servidor de producción, ni en un servidor público. Esto podría ocasionar problemas de seguridad.

Reiniciar Prosody

Cuando el modo de depuración está activado, puede reiniciar Prosody utilizando esta llamada a la API: http://your_instance.tld/plugins/livechat/router/api/restart_prosody. Esta llamada no necesita autenticación. La puede hacer desde la linea de comandos, usando por ejemplo curl http://your_instance.tld/plugins/livechat/router/api/restart_prosody.

Depurador de Prosody

Es posible conectar la AppImage Prosody a un depurador remoto usando [MobDebug]https://luarocks.org/modules/paulclinger/mobdebug).

Para hacerlo, debe configurar MobDebug en un directorio al que pueda acceder el usuario peertube. Luego, agrega esto en el archivo debub_mode:

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

host y port son opcionales. debugger_path debe apuntar a la carpeta donde se encuentra el archivo MobDebug .lua.

Reiniciar Peertube.

Inicie su servidor de depuración.

Para que Prosody se conecte al depurador, llame a la API http://your_instance.tld/plugins/livechat/router/api/restart_prosody?debugger=true. Esta llamada no necesita ninguna autenticación. Se puede hacer desde una línea de comandos, por ejemplo con curl http://your_instance.tld/plugins/livechat/router/api/restart_prosody?debugger=true. Incluso puede configurar su servidor de depuración para iniciar esta solicitud automáticamente.

Prosody se reiniciará, conectándose al depurador.

Entorno de desarrollo rápido con Docker

Hay un tutorial, en francés, en el foro de Peertube que explica cómo construir rápidamente un entorno de desarrollo utilizando Docker.

Se creó un repositorio sobre ello, consulte pt-plugin-dev.

Nota: por una razón desconocida, Prosody no puede resolver la dirección DNS de los contenedores cuando se utiliza la biblioteca lua-unbound. Hay un hack en el plugin para resolverlo: simplemente crea un archivo /data/plugins/data/peertube-plugin-livechat/no_lua_unbound en tus docker-volumes, luego reinicia los contenedores.

Reconstruir e instalar rápidamente el plugin

Cuando hace un cambio, no debe siempre reconstruir el proyecto completo, y reinstalar el plugin en su entorno de desarrollo. Puede solo construir la parte modificada( ejemplo, si solo has modificado los ficheros del cliente: npm run build:client). Verifica el fichero package.json para los scripts de construcción disponibles.

Cuando el plugin ya esta instalado en su instancia de desarrollo, y no ha cambiado cualquier dependencia, puede instalar rápidamente su trabajo siguiendo estas etapas:

  • reconstruir las partes necesarias del plugin, (cliente, estilos, …),
  • sobrescribir el contenido de data/plugins/node_modules/peertube-plugin-livechat/dist/ de su instancia de desarrollo con el contenido del directorio dist,
  • change recursively plugins/node_modules/peertube-plugin-livechat/dist/ files owner to your peertube user,
  • restart your instance.

Pruebas de rendimiento

El repositorio livechat-perf-test contiene algunas herramientas para realizar pruebas de rendimiento. Se puede utilizar para evaluar mejoras de código, o encontrar cuellos de botella.