Desenvolver

Fale sempre sobre os recursos que você quer desenvolver, criando/encontrando e comentando o problema que o aborda antes de começar a trabalhar nele, e informe à comunidade que você começou a codificar reivindicando o problema.

O Pull Request deve ser feito no branch main.

Note

Até março de 2023, as contribuições eram feitas no branch develop. Este procedimento está obsoleto.

Pré-requisito para construir este plugin

É altamente recomendável estar familiarizado com os seguintes conceitos:

  • Git
  • NodeJS
  • NPM
  • Texto datilografado

Para construir o plugin, você deve ter os seguintes pacotes:

  • git
  • npm (>=8.x)
  • nodejs (>=14.x)
  • construção-essencial
  • coreutils
  • wget
  • reutilização

Observe que este plugin precisa de uma AppImage para o servidor Prosody XMPP. Esta AppImage é fornecida pelo projeto paralelo Prosody AppImage. O script build-prosody.sh baixa os binários anexados a este repositório remoto e verifica se seus hashsums sha256 estão corretos.

Desenvolver

Clone o repositório, construa o plugin e crie seu branch de recurso:

# Clone o repositório. Não se esqueça de usar --recursive para clonar submódulos.
git clone https://github.com/JohnXLivingston/peertube-plugin-livechat.git --recursive

cd peertube-plugin-livechat

# Instale as dependências do NPM e compile o módulo pela primeira vez:
npm install

# Compile o plugin após uma modificação:
npm run build

# Se você tiver um fork do repositório, adicione-o como remoto (exemplo):
git remote add me git@github.com:MY_GITHUB_ACCOUNT/peertube-plugin-livechat.git

# Crie uma ramificação local para seus desenvolvimentos e faça check-out dela (exemplo):
git checkout my_development # Observação: se um problema estiver associado, use fix_1234 como nome do seu branch (onde 1234 é o número do issue)
# Para propor suas modificações, envie seu branch para seu repositório (exemplo):
git push --set-upstream me my_development
# Em seguida, vá para seu repositório github com seu navegador da web para propor o Pull Request (veja instruções adicionais abaixo)

Quando estiver pronto para mostrar seu código e solicitar feedback, envie um rascunho de Pull Request. Quando estiver pronto para uma revisão de código antes da mesclagem, envie um Pull Request. De qualquer forma, vincule seu PR aos problemas que ele resolve usando a sintaxe do GitHub: “fixes #issue_number”.

O código do front-end está na pasta client, o código do back-end em server. Há alguns códigos compartilhados na pasta shared.

Para instruções gerais (desenvolvimento de plugins, construção, instalação, …), consulte a documentação do Peertube.

Você pode construir o plugin com recursos extras de depuração simplesmente usando:

NODE_ENV=dev npm run build

Este plugin é compatível com REUSE: ele usa cabeçalhos SPDX para identificar informações de licenciamento de seu código-fonte. Mais informações no site REUSE. Você pode usar a ferramenta de linha de comando reuse para ajudar a atualizar os cabeçalhos. O comando npm run lint usará o comando reuse para verificar a conformidade. Não se esqueça de adicionar suas informações de direitos autorais nos cabeçalhos SPDX ao modificar algum código.

ESBuild vs Typescript

Este plugin usa o ESBuild para geração de código frontend, como o plugin oficial peertube-plugin-quickstart. O ESBuild pode lidar com Typescript, mas não verifica os tipos (consulte a documentação do ESBuild). É por isso que primeiro compilamos o Typescript com a opção -noEmit, apenas para verificar os tipos (check:client:ts no arquivo package.json). Em seguida, se tudo estiver correto, executamos o ESBuild para gerar o JavaScript compilado.

Modo de depuração

Este plugin possui um modo de depuração que reduz um pouco o atraso. Por exemplo, alguns arquivos de log serão atualizados a cada dois minutos, em vez de uma vez por dia. Isso permite testar com mais facilidade determinadas ações, que normalmente levariam horas ou dias para serem concluídas.

Para habilitar este modo, você só precisa criar o arquivo /var/www/peertube/storage/plugins/data/peertube-plugin-livechat/debug_mode (substituindo /var/www/peertube/storage/ pelo caminho correto na sua instalação).

A simples existência deste arquivo é suficiente para acionar o modo de depuração. Para garantir que ele seja levado em consideração, você pode reiniciar sua instância do Peertube.

Este arquivo pode conter JSON para habilitar opções mais avançadas. Para obter uma lista dos parâmetros existentes, consulte server/lib/debug.ts. Reinicie o Peertube após cada modificação de conteúdo.

Warning

Não habilite este modo em um servidor de produção, nem em um servidor público. Isso pode causar problemas de segurança.

Reiniciar Prosódia

Quando o modo de depuração estiver ativado, você pode reiniciar o Prosody usando esta chamada de API: http://your_instance.tld/plugins/livechat/router/api/restart_prosody. Esta chamada não requer autenticação. Pode ser feita a partir de uma linha de comando, por exemplo, usando curl http://your_instance.tld/plugins/livechat/router/api/restart_prosody.

Depurador de prosódia

É possível conectar o Prosody AppImage a um depurador remoto usando MobDebug.

Para isso, você precisa configurar o MobDebug em uma pasta acessível ao usuário peertube. Em seguida, adicione isto ao arquivo debub_mode:

{
  "debug_prosody": {
    "debugger_path": "/o_caminho_para_o_mobdebug/src",
    "host": "localhost",
    "porta": "8172"
  }
}

host e port são opcionais. debugger_path deve apontar para a pasta onde está o arquivo .lua MobDebug.

Reinicie o Peertube.

Inicie seu servidor depurador.

Para que o Prosody se conecte ao depurador, chame a API http://your_instance.tld/plugins/livechat/router/api/restart_prosody?debugger=true. Essa chamada não requer autenticação. Ela pode ser feita a partir de uma linha de comando, por exemplo, com curl http://your_instance.tld/plugins/livechat/router/api/restart_prosody?debugger=true. Você pode até configurar seu servidor de depuração para iniciar essa solicitação automaticamente.

O Prosody será reiniciado, conectando-se ao depurador.

Ambiente de desenvolvimento rápido usando Docker

Há um tutorial, em francês, no fórum Peertube que explica como construir rapidamente um ambiente de desenvolvimento usando o Docker.

Um repositório foi criado a partir dele, confira pt-plugin-dev.

Observação: por um motivo desconhecido, o Prosody não consegue resolver o endereço DNS dos contêineres ao usar a biblioteca lua-unbound. Há um truque sujo no plugin: basta criar um arquivo /data/plugins/data/peertube-plugin-livechat/no_lua_unbound no seu docker-volumes e reiniciar os contêineres.

Reconstrua e instale o plugin rapidamente

Ao fazer modificações, você não precisa sempre reconstruir o projeto inteiro e reinstalar o plugin no seu ambiente de desenvolvimento. Você pode compilar apenas a parte modificada (por exemplo, se você modificou apenas os arquivos do cliente: npm run build:client). Verifique os arquivos package.json para ver os scripts de compilação disponíveis.

Quando o plugin já estiver instalado na sua instância de desenvolvimento e você não tiver alterado nenhuma dependência, você pode instalar seu trabalho rapidamente seguindo estas etapas:

  • reconstruir partes necessárias do plugin (cliente, estilos, …),
  • sobrescrever o conteúdo data/plugins/node_modules/peertube-plugin-livechat/dist/ da sua instância dev pelo conteúdo da pasta dist do plugin,
  • alterar recursivamente o proprietário dos arquivos plugins/node_modules/peertube-plugin-livechat/dist/ para seu usuário peertube,
  • reinicie sua instância.

Testes de desempenho

O repositório livechat-perf-test contém algumas ferramentas para realizar testes de desempenho. Ele pode ser usado para avaliar melhorias no código ou encontrar gargalos.