Configuração de Desenvolvimento
Pré-requisitos
- Docker / Docker Compose
- Node.js (veja
engines.nodeempackage.json) - pnpm (veja
engines.pnpm/packageManagerempackage.json) - SQLite3
- Inkscape (para tradução de SVG de documentação e exportação PNG; obrigatório apenas se você executar
translateoutranslate:svg) - bat/batcat (para mostrar uma versão formatada do
translate:help) - direnv (para carregar automaticamente os arquivos
.env*) - Playwright Chromium (execute
pnpm take-screenshots:installapóspnpm install; isso executaplaywright install chromium)
Etapas
1. Clone o repositório:
git clone https://github.com/wsj-br/duplistatus.git
cd duplistatus
2. Instale as dependências (Debian/Ubuntu):
sudo apt update
sudo apt install sqlite3 git inkscape bat -y
sudo apt install -y build-essential python3 python3-dev python3-setuptools make g++ gcc pkg-config
3. Remova instalações antigas do Node.js (se você já o tiver instalado)
sudo apt-get purge nodejs npm -y
sudo apt-get autoremove -y
sudo rm -rf /usr/local/bin/npm
sudo rm -rf /usr/local/share/man/man1/node*
sudo rm -rf /usr/local/lib/dtrace/node.d
rm -rf ~/.npm
rm -rf ~/.node-gyp
sudo rm -rf /opt/local/bin/node
sudo rm -rf /opt/local/include/node
sudo rm -rf /opt/local/lib/node_modules
sudo rm -rf /usr/local/lib/node*
sudo rm -rf /usr/local/include/node*
sudo rm -rf /usr/local/bin/node*
4. Instale Node.js e pnpm:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
source ~/.bashrc
nvm install --lts
nvm use --lts
npm config set allow-scripts=pnpm --location=user
npm install -g pnpm npm-check-updates doctoc
5. Configure o suporte direnv
Adicione estas linhas ao seu arquivo ~/.bashrc
# direnv support (apt install direnv)
eval "$(direnv hook bash)"
com este comando:
(echo "# direnv support (apt install direnv)"; echo 'eval "$(direnv hook bash)') >> ~/.bashrc
no diretório base do repositório, execute:
direnv allow
Adicione estas linhas ao seu arquivo ~/.profile
# export the Bash environment (needed for code editor or AI Agents to load it).
export BASH_ENV="$HOME/.bashrc"
com este comando:
(echo "# export the Bash environment (needed for code editor or AI Agents to load it)."; \
echo 'export BASH_ENV="$HOME/.bashrc"') >> ~/.profile
Você precisa reabrir o terminal ou pode precisar fechar/reabrir o editor de código IDE (Visual Studio Code, Cursor, Lingma, Antigravity, Zed, ...) para que essas alterações entrem em vigor.
6. Crie o arquivo .env no diretório base do repositório com estas variáveis.
-
Você pode usar qualquer valor para
VERSION; será atualizado automaticamente ao usar os scripts de desenvolvimento. -
Use senhas aleatórias para
ADMIN_PASSWORDeUSER_PASSWORD; essas senhas serão usadas no scriptpnpm take-screenshots. -
Você pode obter
OPENROUTER_API_KEYem openrouter.ai.VERSION=x.x.x# Development user passwordsADMIN_PASSWORD="admin_secret"USER_PASSWORD="user_secret"# Openrouter.ai API key for translation scripts in documentationOPENROUTER_API_KEY=sk-or-v1-your-key-for-translate-files
Scripts Disponíveis
O projeto inclui vários scripts npm para diferentes tarefas de desenvolvimento:
Scripts de Desenvolvimento
pnpm dev- Inicia o servidor de desenvolvimento Next.js (porta 8666) e o serviço cron (porta 8667) juntos viaconcurrently(inclui pré-verificações). CTRL-C interrompe ambos.NODE_OPTIONSpara Next.js carregascripts/dev-preload.cjs, que aplicascripts/peer-ip.cjs(endereço de peer TCP para listas de permissão de IP) e timestamps de log de requisição.pnpm dev:next- Inicia apenas o servidor de desenvolvimento Next.js na porta 8666 (sem cron).pnpm build- Compila a aplicação para produção (inclui pré-verificações)pnpm lint- Executa ESLint para verificar a qualidade do códigopnpm typecheck- Executa verificação de tipos TypeScriptscripts/upgrade-dependencies.sh— Atualização segura para compilação de cada pacote do workspace (detectado automaticamente). Resolve versões mais recentes comnpm-check-updates, instala a partir da raiz do workspace e mantém apenas atualizações que passam emtypecheck/lintde cada pacote (gates de peer fixameslint/typescriptquando a pilha de lint não permite a versão major mais recente). Em seguida, executapnpm audit/audit --fixe aplica à força (e relata) qualquer correção de segurança que necessite mudanças de código. Atualiza o arquivo de lock do workspace e browserslist. Prefirasource ./scripts/upgrade-dependencies.shpara que nvm se aplique ao seu shell; em CI ou automação useCI=1ouUPGRADE_ALLOW_EXEC=1ao executar o arquivo diretamente. Veja tambémscripts/upgrade-tools.shapenas para ferramentas Node/pnpm.scripts/clean-workspace.sh- Limpa o workspacepnpm i18n:tools --local/--remote— Vincule um checkout irmãoai-i18n-toolsou restaure o último pacote npm (scripts/link-ai-i18n-tools.sh). Não faça commit do especificadorlink:.
Nota: O script preinstall aplica automaticamente pnpm como gerenciador de pacotes.
Scripts de Documentação
Estes scripts devem ser executados a partir do diretório documentation/:
pnpm start- Compila e serve o site de documentação em modo de produção (porta 3000 por padrão)pnpm start:en- Inicia servidor de desenvolvimento de documentação em inglês (hot reloading habilitado)pnpm start:fr- Inicia servidor de desenvolvimento de documentação em locale francês (hot reloading habilitado)pnpm start:de- Inicia servidor de desenvolvimento de documentação em locale alemão (hot reloading habilitado)pnpm start:es- Inicia servidor de desenvolvimento de documentação em locale espanhol (hot reloading habilitado)pnpm start:pt-br- Inicia servidor de desenvolvimento de documentação em locale português (Brasil) (hot reloading habilitado)pnpm build- Compila o site de documentação para produçãopnpm write-translations- Extrai strings traduzíveis da documentaçãopnpm translate- Traduz arquivos de documentação usando IA (veja Fluxo de Tradução)pnpm lint- Executa ESLint em arquivos de origem da documentação
Os servidores de desenvolvimento (start:*) fornecem substituição de módulo quente para desenvolvimento rápido. A porta padrão é 3000.
Scripts de Produção
pnpm build-local- Compila e prepara para produção local (inclui pré-verificações, copia arquivos estáticos para diretório standalone)pnpm start-local- Inicia servidor de produção localmente (porta 8666, inclui pré-verificações). Nota: Executepnpm build-localprimeiro. Inicia o servidor standalone com--require ./scripts/peer-ip.cjs.pnpm start- Inicia servidor de produção (porta 9666) com o mesmo pré-carregamento de peer-ip. Docker usadocker-entrypoint.shpara carregar o mesmo script.
Scripts do Docker
pnpm docker:up- Inicia stack do Docker Composepnpm docker:down- Para stack do Docker Composepnpm docker:clean- Limpa ambiente Docker e cachepnpm docker:devel- Compila uma imagem Docker de desenvolvimento marcada comowsj-br/duplistatus:devel
Scripts do Serviço Cron
pnpm cron:start- Inicia serviço cron em modo de produçãopnpm cron:dev- Inicia apenas o serviço cron em modo de desenvolvimento com monitoramento de arquivos (porta 8667). Geralmente desnecessário ao usarpnpm dev, que já inicia cron.pnpm cron:start-local- Inicia serviço cron localmente para testes (porta 8667)
Scripts de Teste
pnpm generate-test-data- Gera dados de Backup de teste (requer parâmetro --servers=N)pnpm validate-csv-export- Valida funcionalidade de exportação CSVpnpm test-entrypoint- Testa script de entrypoint do Docker em desenvolvimento local (veja Scripts de Teste)pnpm take-screenshots- Captura screenshots para documentação (veja Ferramentas de Documentação)
Verificações de Atrasado, verificações de saúde do cron e testes SMTP são feitos através da aplicação em execução e curl (veja Scripts de Teste): os antigos helpers standalone pnpm para esses foram removidos.