diff --git a/.replit b/.replit index 048618b..3a519e8 100644 --- a/.replit +++ b/.replit @@ -19,6 +19,10 @@ externalPort = 80 localPort = 33035 externalPort = 3001 +[[ports]] +localPort = 39511 +externalPort = 3003 + [[ports]] localPort = 41343 externalPort = 3000 diff --git a/GITLAB-DEPLOY.md b/GITLAB-DEPLOY.md new file mode 100644 index 0000000..0b8c4c6 --- /dev/null +++ b/GITLAB-DEPLOY.md @@ -0,0 +1,326 @@ +# πŸš€ VigilanzaTurni - Guida Deployment GitLab + +Sistema di deployment automatico con **versioning semantico** e **backup database**. + +--- + +## πŸ“‹ Indice + +1. [Configurazione Iniziale](#configurazione-iniziale) +2. [Come Fare il Deploy](#come-fare-il-deploy) +3. [Versioning Semantico](#versioning-semantico) +4. [Backup Database](#backup-database) +5. [Troubleshooting](#troubleshooting) + +--- + +## πŸ”§ Configurazione Iniziale + +### 1. Crea Personal Access Token su GitLab + +1. Vai su **GitLab** β†’ **Preferenze** β†’ **Access Tokens** + - URL: https://gitlab.com/-/profile/personal_access_tokens + +2. Crea nuovo token con nome: `VigilanzaTurni Deploy` + +3. Seleziona questi **permessi** (scopes): + - βœ… `api` - Accesso completo API + - βœ… `read_repository` - Lettura repository + - βœ… `write_repository` - Scrittura repository + +4. **Salva il token** (lo vedrai una sola volta!) + +### 2. Configura git.env + +Crea il file `git.env` nella root del progetto: + +```bash +# Il file git.env Γ¨ giΓ  presente come template +nano git.env +``` + +Contenuto `git.env`: + +```bash +GITLAB_USER=tuo-username +GITLAB_TOKEN=glpat-xxxxxxxxxxxxxxxxxxxx +GITLAB_REPO=https://gitlab.com/tuo-username/vigilanzaturni.git +GITLAB_BRANCH=main +``` + +**⚠️ IMPORTANTE**: +- Il file `git.env` Γ¨ giΓ  in `.gitignore` - **non verrΓ  mai committato** +- Conserva il token in un posto sicuro (password manager) + +### 3. Verifica Repository GitLab + +Assicurati che il repository esista su GitLab: + +```bash +# Crea repository su GitLab web UI +# Oppure usa GitLab CLI +``` + +--- + +## πŸš€ Come Fare il Deploy + +### Metodo Rapido (Consigliato) + +```bash +# Rendi eseguibile (solo prima volta) +chmod +x push-gitlab.sh + +# Deploy patch (bug fix, piccole modifiche) +./push-gitlab.sh + +# Deploy minor (nuove funzionalitΓ ) +./push-gitlab.sh minor + +# Deploy major (breaking changes) +./push-gitlab.sh major +``` + +### Metodo Completo + +```bash +# Usa lo script principale per maggior controllo +./deploy-to-gitlab.sh [patch|minor|major] +``` + +--- + +## πŸ“Š Versioning Semantico + +Il sistema usa **Semantic Versioning 2.0.0**: `MAJOR.MINOR.PATCH` + +### Formato Versione: `X.Y.Z` + +| Componente | Quando Incrementare | Esempio | +|------------|---------------------|---------| +| **MAJOR (X)** | Breaking changes, API incompatibili | 1.5.3 β†’ **2.0.0** | +| **MINOR (Y)** | Nuove funzionalitΓ  retrocompatibili | 1.5.3 β†’ **1.6.0** | +| **PATCH (Z)** | Bug fix, piccole correzioni | 1.5.3 β†’ **1.5.4** | + +### Esempi Pratici + +#### PATCH (default) - Bug fix +```bash +./push-gitlab.sh # 1.0.0 β†’ 1.0.1 +./push-gitlab.sh patch # 1.0.1 β†’ 1.0.2 +``` + +**Quando usare**: +- βœ… Correzione bug +- βœ… Typo nel codice +- βœ… Performance minori +- βœ… Aggiornamento dipendenze patch + +#### MINOR - Nuove funzionalitΓ  +```bash +./push-gitlab.sh minor # 1.0.5 β†’ 1.1.0 +``` + +**Quando usare**: +- βœ… Nuova pagina/sezione +- βœ… Nuova API endpoint +- βœ… Feature richiesta da cliente +- βœ… Miglioramento UX significativo + +#### MAJOR - Breaking changes +```bash +./push-gitlab.sh major # 1.5.2 β†’ 2.0.0 +``` + +**Quando usare**: +- βœ… Cambio architettura database +- βœ… Rimozione API/endpoint +- βœ… Cambio sistema autenticazione +- βœ… Migrazione framework + +--- + +## πŸ’Ύ Backup Database + +### Automatico ad Ogni Deploy + +Lo script **crea automaticamente** un backup del database: + +``` +database-backups/ + └── vigilanzaturni_v1.0.1_20250117_143022.sql.gz + └── vigilanzaturni_v1.0.2_20250117_150315.sql.gz + └── vigilanzaturni_v1.1.0_20250118_091145.sql.gz +``` + +### Formato Nome File + +``` +vigilanzaturni_v{VERSION}_{TIMESTAMP}.sql.gz +``` + +- **VERSION**: Versione deployment (es. 1.0.1) +- **TIMESTAMP**: Data e ora (YYYYMMDD_HHMMSS) + +### Retention Policy + +- βœ… Compressi con gzip (risparmio spazio ~90%) +- βœ… Mantiene ultimi **10 backup** automaticamente +- βœ… Backup piΓΉ vecchi eliminati automaticamente + +### Ripristino Manuale + +Se necessario ripristinare un backup: + +```bash +# 1. Decomprimi +gunzip database-backups/vigilanzaturni_v1.0.1_20250117_143022.sql.gz + +# 2. Ripristina +psql $DATABASE_URL < database-backups/vigilanzaturni_v1.0.1_20250117_143022.sql +``` + +--- + +## πŸ” Troubleshooting + +### ❌ Errore: "git.env non trovato" + +**Soluzione**: +```bash +# Crea git.env e configura credenziali +nano git.env +``` + +### ❌ Errore: "Authentication failed" + +**Possibili cause**: +1. Token GitLab scaduto +2. Token senza permessi corretti +3. Username errato + +**Soluzione**: +```bash +# 1. Verifica credenziali in git.env +cat git.env + +# 2. Crea nuovo token su GitLab +# https://gitlab.com/-/profile/personal_access_tokens + +# 3. Aggiorna GITLAB_TOKEN in git.env +``` + +### ❌ Errore: "Remote repository not found" + +**Soluzione**: +```bash +# Verifica URL repository in git.env +# Deve essere: https://gitlab.com/USERNAME/REPO.git + +# Verifica che il repository esista su GitLab +``` + +### ❌ Backup Database Fallito + +**Soluzione**: +```bash +# Verifica DATABASE_URL +echo $DATABASE_URL + +# Verifica pg_dump installato +which pg_dump + +# Test manuale backup +pg_dump $DATABASE_URL > test-backup.sql +``` + +### ⚠️ Warning: "Push failed" + +**Possibili cause**: +1. Repository protetto (protected branch) +2. Permessi insufficienti +3. Conflitti git + +**Soluzione**: +```bash +# 1. Verifica branch protection su GitLab +# Settings β†’ Repository β†’ Protected Branches + +# 2. Verifica permessi token (deve essere Maintainer/Owner) + +# 3. Forza push (con cautela!) +git push gitlab main --force +``` + +--- + +## πŸ“ˆ Workflow Consigliato + +### Sviluppo Giornaliero + +```bash +# Ogni bug fix o piccola modifica +./push-gitlab.sh # 1.0.0 β†’ 1.0.1 β†’ 1.0.2 +``` + +### Fine Settimana (Nuove Feature) + +```bash +# Dopo aver completato una feature +./push-gitlab.sh minor # 1.0.5 β†’ 1.1.0 +``` + +### Release Maggiori (Milestone) + +```bash +# Dopo cambiamenti architetturali importanti +./push-gitlab.sh major # 1.5.2 β†’ 2.0.0 +``` + +--- + +## πŸ“ File Generati + +| File | Descrizione | Committato su Git | +|------|-------------|-------------------| +| `git.env` | Credenziali GitLab | ❌ No (in .gitignore) | +| `version.json` | Versione corrente | βœ… SΓ¬ | +| `database-backups/*.sql.gz` | Backup DB | ❌ No (in .gitignore) | +| `deploy-to-gitlab.sh` | Script deployment | βœ… SΓ¬ | +| `push-gitlab.sh` | Helper script | βœ… SΓ¬ | + +--- + +## 🎯 Best Practices + +### βœ… DO + +- Fai deploy **frequenti** (patch) +- Usa **minor** per nuove feature complete +- Usa **major** solo per breaking changes +- Testa localmente prima del deploy +- Verifica backup database dopo deploy importante + +### ❌ DON'T + +- Non committare `git.env` (giΓ  protetto) +- Non saltare versioni manualmente +- Non modificare `version.json` manualmente +- Non eliminare backup recenti manualmente + +--- + +## πŸ“ž Supporto + +In caso di problemi: + +1. Controlla version.json: `cat version.json` +2. Verifica configurazione: `cat git.env` +3. Testa connessione GitLab manualmente +4. Controlla se il repository esiste + +--- + +**Versione Documento**: 1.0.0 +**Ultimo Aggiornamento**: 2025-01-17 +**CompatibilitΓ **: VigilanzaTurni v1.0.0+ diff --git a/push-gitlab.sh b/push-gitlab.sh new file mode 100755 index 0000000..ceba3e2 --- /dev/null +++ b/push-gitlab.sh @@ -0,0 +1,80 @@ +#!/bin/bash + +# ============================================================================= +# VigilanzaTurni - Quick Push to GitLab +# ============================================================================= +# Script semplificato per deployment rapido +# ============================================================================= + +# Colori +GREEN='\033[0;32m' +BLUE='\033[0;34m' +YELLOW='\033[1;33m' +NC='\033[0m' + +echo -e "${BLUE}" +echo "╔═══════════════════════════════════════════════╗" +echo "β•‘ VigilanzaTurni - GitLab Deployment β•‘" +echo "╔═══════════════════════════════════════════════╝" +echo -e "${NC}" + +# Mostra uso +if [ "$1" == "-h" ] || [ "$1" == "--help" ]; then + echo "Uso:" + echo "" + echo " ./push-gitlab.sh β†’ Patch version (1.0.0 β†’ 1.0.1)" + echo " ./push-gitlab.sh minor β†’ Minor version (1.0.5 β†’ 1.1.0)" + echo " ./push-gitlab.sh major β†’ Major version (1.1.5 β†’ 2.0.0)" + echo "" + echo "Esempi:" + echo "" + echo " ./push-gitlab.sh # Fix bug, piccole modifiche" + echo " ./push-gitlab.sh minor # Nuove funzionalitΓ " + echo " ./push-gitlab.sh major # Breaking changes" + echo "" + exit 0 +fi + +# Determina tipo incremento +INCREMENT_TYPE=${1:-patch} + +case $INCREMENT_TYPE in + patch) + echo -e "${GREEN}πŸ“¦ Deploy PATCH${NC} - Bug fix, piccole modifiche" + ;; + minor) + echo -e "${YELLOW}πŸ†• Deploy MINOR${NC} - Nuove funzionalitΓ " + ;; + major) + echo -e "${BLUE}πŸš€ Deploy MAJOR${NC} - Breaking changes" + ;; + *) + echo -e "❌ Tipo non valido: $INCREMENT_TYPE" + echo "Usa: patch, minor, o major" + exit 1 + ;; +esac + +echo "" + +# Verifica git.env +if [ ! -f "git.env" ]; then + echo "⚠️ git.env non trovato!" + echo "" + echo "Crea il file git.env con queste informazioni:" + echo "" + echo "GITLAB_USER=tuo-username" + echo "GITLAB_TOKEN=tuo-token-personale" + echo "GITLAB_REPO=https://gitlab.com/tuo-username/vigilanzaturni.git" + echo "GITLAB_BRANCH=main" + echo "" + echo "Ottieni il token su: https://gitlab.com/-/profile/personal_access_tokens" + echo "Permessi richiesti: api, read_repository, write_repository" + echo "" + exit 1 +fi + +# Esegui deployment +./deploy-to-gitlab.sh "$INCREMENT_TYPE" + +exit $?