diff --git a/README.md b/README.md index 7ca5e1d..8c2ed91 100644 --- a/README.md +++ b/README.md @@ -2,21 +2,17 @@ Frontend da plataforma EventDev construído com React, Vite, Material-UI e TypeScript. -## Setup Rápido +## Ferramentas necessárias -### Desenvolvimento Local +- [**node.js**](https://nodejs.org/en/download) +- [**docker**](https://www.docker.com/get-started/) +- [**pnpm**](https://pnpm.io/pt/installation) -```bash -pnpm install # ou pnpm run setup -pnpm run dev -``` - -### Desenvolvimento com Docker +### Desenvolvimento Local ```bash -make setup-dev # Criar .env -make dev-up # Iniciar containers -make dev-logs # Ver logs +pnpm install #para instalar dependências +pnpm run dev #para iniciar o servidor de desenvolvimento ``` ## Comandos Disponíveis diff --git a/package.json b/package.json index d3e9e8e..287ba70 100644 --- a/package.json +++ b/package.json @@ -2,10 +2,15 @@ "name": "event-dev-communities", "type": "module", "version": "0.0.0", + "engines": { + "node": " 22.x", + "pnpm": "10.x" + }, "private": true, - "packageManager": "pnpm@10.17.0", + "packageManager": "pnpm@10.23.0", "scripts": { - "dev": "vite --host 0.0.0.0 --port 5173", + "env:setup": "node scripts/env-setup.js", + "dev": "pnpm run env:setup &&vite --host 0.0.0.0 --port 5173", "build": "vite build", "preview": "vite preview", "lint": "eslint .", @@ -15,9 +20,8 @@ "prepare": "husky", "server": "json-server --watch server/db.json --port 4000", "setup": "pnpm install && pnpm run prepare && pnpm run husky:setup", - "check-blocked-files": "git diff --cached --name-only | grep -Fx -e '.vscode/settings.json' -e '.env' -e '.husky/pre-commit' -e '.husky/commit-msg' && echo '✖ Forbidden files staged' && exit 1 || exit 0", - "husky:setup": "node -e \"const fs=require('fs'); const path=require('path'); const huskyDir='.husky'; if(!fs.existsSync(huskyDir)) fs.mkdirSync(huskyDir); fs.writeFileSync(path.join(huskyDir,'pre-commit'),'#!/bin/sh\\n\\npnpm lint-staged && npx validate-branch-name && pnpm run check-blocked-files\\n',{mode:0o755}); fs.writeFileSync(path.join(huskyDir,'commit-msg'),'#!/bin/sh\\n\\nnpx --no-install commitlint --edit \\\"$1\\\"\\n',{mode:0o755}); console.log('Husky: Hooks criados com sucesso!')\"", - "postinstall": "node -e \"if (require('fs').existsSync('.git')) { console.log('Repositório Git encontrado. Configurando Husky...'); require('child_process').execSync('pnpm run husky:setup', {stdio: 'inherit'}); } else { console.log('Repositório Git ausente. Pulando setup do Husky.'); }\"", + "check-blocked-files": "node scripts/check-blocked-files.js", + "husky:setup": "node scripts/setup-husky.js", "health": "curl -f http://localhost:5173 || echo 'Frontend not responding'" }, "dependencies": { diff --git a/scripts/check-blocked-files.js b/scripts/check-blocked-files.js new file mode 100644 index 0000000..87b5477 --- /dev/null +++ b/scripts/check-blocked-files.js @@ -0,0 +1,18 @@ +import { execSync } from 'child_process' + +const blockedFiles = ['.vscode/settings.json', '.env', '.husky/pre-commit', '.husky/commit-msg'] + +try { + const stagedFiles = execSync('git diff --cached --name-only', { encoding: 'utf-8' }).trim().split('\n').filter(Boolean) + + const foundBlockedFiles = stagedFiles.filter((file) => blockedFiles.includes(file)) + + if (foundBlockedFiles.length > 0) { + console.error('✖ Forbidden files staged') + process.exit(1) + } + + process.exit(0) +} catch (error) { + process.exit(0) +} diff --git a/scripts/env-setup.js b/scripts/env-setup.js new file mode 100644 index 0000000..ed18926 --- /dev/null +++ b/scripts/env-setup.js @@ -0,0 +1,8 @@ +import fs from 'fs' + +if (!fs.existsSync('.env')) { + fs.copyFileSync('.env.dev.example', '.env') + console.log('.env file created successfully!') +} else { + console.log('.env file already exists') +} diff --git a/scripts/setup-husky.js b/scripts/setup-husky.js new file mode 100644 index 0000000..b236c77 --- /dev/null +++ b/scripts/setup-husky.js @@ -0,0 +1,23 @@ +import fs from 'fs' +import path from 'path' + +const huskyDir = '.husky' + +if (!fs.existsSync(huskyDir)) { + fs.mkdirSync(huskyDir) +} + +const preCommitContent = `#!/bin/sh + +pnpm lint-staged && npx validate-branch-name && pnpm run check-blocked-files +` + +const commitMsgContent = `#!/bin/sh + +npx --no-install commitlint --edit "$1" +` + +fs.writeFileSync(path.join(huskyDir, 'pre-commit'), preCommitContent, { mode: 0o755 }) +fs.writeFileSync(path.join(huskyDir, 'commit-msg'), commitMsgContent, { mode: 0o755 }) + +console.log('Husky: Hooks criados com sucesso!')