From bd75d781909fe0b125cb5ebd503474c16a20a21a Mon Sep 17 00:00:00 2001 From: Marco Lanzara <48531002-marco370@users.noreply.replit.com> Date: Mon, 17 Nov 2025 08:45:53 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=80=20Release=20v1.0.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Tipo: patch - Database backup: database-backups/vigilanzaturni_v1.0.1_20251117_084546.sql.gz - Data: 2025-11-17 08:45:53 --- ...gilanzaturni_v1.0.1_20251117_084546.sql.gz | Bin 0 -> 1557 bytes deploy-to-gitlab.sh | 296 ++++++++++++++++++ git.env | 20 ++ push-gitlab.sh | 80 +++++ version.json | 12 + 5 files changed, 408 insertions(+) create mode 100644 database-backups/vigilanzaturni_v1.0.1_20251117_084546.sql.gz create mode 100755 deploy-to-gitlab.sh create mode 100644 git.env create mode 100755 push-gitlab.sh create mode 100644 version.json diff --git a/database-backups/vigilanzaturni_v1.0.1_20251117_084546.sql.gz b/database-backups/vigilanzaturni_v1.0.1_20251117_084546.sql.gz new file mode 100644 index 0000000000000000000000000000000000000000..ef6a5048ec0fa7f5f8732e20e1f050fcaf95c9da GIT binary patch literal 1557 zcmV+w2I~1AiwFq8;2LQF19oX=X>4I`dSP^Ra&Bo~b}=q6E-_y+FfuhUF)=q^FgP?d zG&U}Caclt1SzB-0HWYsMuORjk7ifyLShuXk9<*3VjkUzI^ zhq~Xb6f(8|K^*eqIp4YP9Fo4io?Ks}2QJlK(9NeMB3R)qmK2dF2w`rb=jZU560{RM zC;;E6kRE5~^{=mfN7G+kzolDx^P&Xbo=~`Vw44fdGTE3mk_sytP^KK^1(Zh${ega- z#Zx|apPHi{@u}l6M+wX%b`^+oB$Zlh6YTn)7EPJUiO2RZarJ25-CWHw-Hc#C9G9~l z7Xcs~sRaCyfaFZ0mgcRk>APUA&-bq+RWaP#Pp>4!!aX=4R)?#X=n8&!*q8K0s{25J z|1M$)$1O0RT5gO!m70b3-RuU8M~c4ckswXv}5 z(vmXF5#UoQ9FL@*r2e>jnoZ*M3u|tEDJ@ME=~#e+gAl;q`=OFY!iAs?fEHBFLp}NA zNS6zG9!sdAX(|opk}RUc!72ft_x|zVDe8Mt^|(IAIN=jLjV~2U!-NP(D<@*!-w_?6 z0(P6HbI&<|2rf=Nn(ENOW~9m0BRWgJ@g@F{Q+{MG4W*uEWS`^$l*)~vb+Pp<>4(+B z*N;y9*AFT?pdVQnloUBacR2E)H{h*LWr$s>OE{G8=B$HVSBEd4>c9!W4itwo-L`Zq zvT#7(mHahB_9=vsn8yrlpjZd^T}oqyR!2s~JBS=-Wb1JKU)%$4*QQ~cDf?!mrV|7| z9)a4A1@tB=&^Ihjy7SDF z*m(k~i=-45Wwjq2J%|Q$WIclZ;f&T6`S|&3w)$Y8&lQ~e6tmp5abs=ALW%BEkYG#o zyq8U;kMUzEd=qH<)dt+mkJV>O&#o$oRm;)JW*IL_E46BbJk1+%i;ODrr`(r6JtN4y z`+(56kCl=$g@;_^=~;p{heN>?ce!5@k(?z<1KX2=V^?(sCBO;*NrwJ54bENJu;X!w3eE)*xf@sgmp zbBqxE{xab5KtB+aeA_siWczJQxnUc_W7Z+O z^K>ze__iiAj^y5YHjaw+ZSsS%>#=Oy)lwbBy>7UUa;~-C8RM)r=JWEku|@zrtQQ}R z^;h)4{EDU?iLAMF+v=v+`&}8=?mg&hgCxQ++WX zfn`$e<68YHW(0B-frH4E9)X^5 z(CGT&DK+8l!+&@D=%9w~R%>%{ZzVOW$QQIW@65Gn-J12M^R~j4T{NHo{O|DSGu_FILt-BjdRIZ!ApMJkPwYZ_)KdHuRzJ#Vr2?0b_0^ HavuNyCjSO9 literal 0 HcmV?d00001 diff --git a/deploy-to-gitlab.sh b/deploy-to-gitlab.sh new file mode 100755 index 0000000..257d21e --- /dev/null +++ b/deploy-to-gitlab.sh @@ -0,0 +1,296 @@ +#!/bin/bash + +# ============================================================================= +# IDS - GitLab Deployment Script con Versioning Semantico +# ============================================================================= +# Uso: +# ./deploy-to-gitlab.sh → incrementa patch (1.0.0 → 1.0.1) +# ./deploy-to-gitlab.sh minor → incrementa minor (1.0.5 → 1.1.0) +# ./deploy-to-gitlab.sh major → incrementa major (1.1.5 → 2.0.0) +# ============================================================================= + +set -e # Exit on error + +# Colori per output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +# Funzione di log +log_info() { + echo -e "${BLUE}[INFO]${NC} $1" +} + +log_success() { + echo -e "${GREEN}[SUCCESS]${NC} $1" +} + +log_warning() { + echo -e "${YELLOW}[WARNING]${NC} $1" +} + +log_error() { + echo -e "${RED}[ERROR]${NC} $1" +} + +# ============================================================================= +# 1. CARICA CREDENZIALI DA git.env +# ============================================================================= + +if [ ! -f "git.env" ]; then + log_error "File git.env non trovato!" + log_info "Crea il file git.env con le credenziali GitLab:" + echo "" + echo "GITLAB_USER=your-username" + echo "GITLAB_TOKEN=your-token" + echo "GITLAB_REPO=https://gitlab.com/username/repo.git" + echo "GITLAB_BRANCH=main" + echo "" + exit 1 +fi + +log_info "Carico credenziali da git.env..." +source git.env + +# Verifica credenziali obbligatorie +if [ -z "$GITLAB_USER" ] || [ -z "$GITLAB_TOKEN" ] || [ -z "$GITLAB_REPO" ]; then + log_error "Credenziali mancanti in git.env!" + log_info "Assicurati di configurare: GITLAB_USER, GITLAB_TOKEN, GITLAB_REPO" + exit 1 +fi + +# Default branch se non specificato +GITLAB_BRANCH=${GITLAB_BRANCH:-main} + +log_success "Credenziali caricate: $GITLAB_USER @ $GITLAB_REPO" + +# ============================================================================= +# 2. DETERMINA TIPO DI INCREMENTO VERSIONE +# ============================================================================= + +INCREMENT_TYPE=${1:-patch} # default: patch + +if [[ ! "$INCREMENT_TYPE" =~ ^(patch|minor|major)$ ]]; then + log_error "Tipo incremento non valido: $INCREMENT_TYPE" + log_info "Uso: $0 [patch|minor|major]" + exit 1 +fi + +log_info "Tipo incremento: $INCREMENT_TYPE" + +# ============================================================================= +# 3. LEGGI VERSIONE CORRENTE E CALCOLA NUOVA VERSIONE +# ============================================================================= + +if [ ! -f "version.json" ]; then + log_warning "version.json non trovato, creo versione iniziale 1.0.0" + echo '{"version":"1.0.0","lastUpdate":"","changelog":[]}' > version.json +fi + +CURRENT_VERSION=$(node -pe "JSON.parse(require('fs').readFileSync('version.json', 'utf8')).version") +log_info "Versione corrente: $CURRENT_VERSION" + +# Parse versione (MAJOR.MINOR.PATCH) +IFS='.' read -r MAJOR MINOR PATCH <<< "$CURRENT_VERSION" + +# Incrementa secondo il tipo +case $INCREMENT_TYPE in + patch) + PATCH=$((PATCH + 1)) + ;; + minor) + MINOR=$((MINOR + 1)) + PATCH=0 + ;; + major) + MAJOR=$((MAJOR + 1)) + MINOR=0 + PATCH=0 + ;; +esac + +NEW_VERSION="$MAJOR.$MINOR.$PATCH" +log_success "Nuova versione: $NEW_VERSION" + +# ============================================================================= +# 4. BACKUP DATABASE POSTGRESQL +# ============================================================================= + +log_info "Avvio backup database PostgreSQL..." + +# Directory backup +BACKUP_DIR="database-backups" +mkdir -p $BACKUP_DIR + +# Nome file backup con timestamp e versione +TIMESTAMP=$(date +%Y%m%d_%H%M%S) +BACKUP_FILE="$BACKUP_DIR/vigilanzaturni_v${NEW_VERSION}_${TIMESTAMP}.sql" + +# Controlla se DATABASE_URL è disponibile +if [ -z "$DATABASE_URL" ]; then + log_warning "DATABASE_URL non trovato, salto backup database" +else + log_info "Creo backup: $BACKUP_FILE" + + # Backup con pg_dump (include schema e dati) + # Opzioni: --clean (DROP before CREATE), --if-exists (no error if not exists), --inserts (INSERT statements per compatibilità) + if pg_dump "$DATABASE_URL" --clean --if-exists --inserts > "$BACKUP_FILE"; then + # Comprimi backup + gzip "$BACKUP_FILE" + BACKUP_FILE="${BACKUP_FILE}.gz" + + BACKUP_SIZE=$(du -h "$BACKUP_FILE" | cut -f1) + log_success "Backup completato: $BACKUP_FILE ($BACKUP_SIZE)" + + # Mantieni solo gli ultimi 10 backup + log_info "Pulizia backup vecchi (mantengo ultimi 10)..." + ls -t $BACKUP_DIR/*.sql.gz 2>/dev/null | tail -n +11 | xargs rm -f 2>/dev/null || true + else + log_error "Backup database fallito! Verifica DATABASE_URL e permessi pg_dump" + exit 1 + fi +fi + +# ============================================================================= +# 5. AGGIORNA version.json +# ============================================================================= + +log_info "Aggiorno version.json..." + +# Crea nuovo changelog entry +CHANGELOG_ENTRY=$(cat < 50) { + versionData.changelog = versionData.changelog.slice(0, 50); +} +fs.writeFileSync('version.json', JSON.stringify(versionData, null, 2)); +" + +log_success "version.json aggiornato a v$NEW_VERSION" + +# ============================================================================= +# 6. CONFIGURA GIT REMOTE CON CREDENZIALI +# ============================================================================= + +log_info "Configuro repository GitLab..." + +# Costruisci URL con autenticazione +if [[ "$GITLAB_REPO" == https://* ]]; then + # HTTPS: Gitea richiede username:token (token fa da password) + # Formato: https://USERNAME:TOKEN@gitea-url/owner/repo.git + REPO_WITH_AUTH=$(echo "$GITLAB_REPO" | sed "s|https://|https://${GITLAB_USER}:${GITLAB_TOKEN}@|") +elif [[ "$GITLAB_REPO" == git@* ]]; then + # SSH: usa direttamente + REPO_WITH_AUTH="$GITLAB_REPO" + log_warning "Usando SSH, assicurati che le chiavi SSH siano configurate" +else + log_error "Formato repository non valido: $GITLAB_REPO" + exit 1 +fi + +# Rimuovi remote gitlab se esiste +git remote remove gitlab 2>/dev/null || true + +# Aggiungi remote gitlab +git remote add gitlab "$REPO_WITH_AUTH" + +log_success "Remote GitLab configurato" + +# ============================================================================= +# 7. COMMIT E PUSH SU GITLAB +# ============================================================================= + +log_info "Preparo commit..." + +# Stage tutti i file (incluso backup) +git add -A + +# Verifica se ci sono cambiamenti +if git diff --cached --quiet; then + log_warning "Nessuna modifica da committare" +else + # Commit con messaggio versione + COMMIT_MSG="🚀 Release v$NEW_VERSION + +- Tipo: $INCREMENT_TYPE +- Database backup: $BACKUP_FILE +- Data: $(date '+%Y-%m-%d %H:%M:%S') +" + + git commit -m "$COMMIT_MSG" + log_success "Commit creato: v$NEW_VERSION" +fi + +# Push su GitLab +log_info "Push su GitLab branch $GITLAB_BRANCH..." + +if git push gitlab "$GITLAB_BRANCH" --force 2>&1; then + log_success "Push completato su GitLab!" +else + log_error "Push fallito! Verifica credenziali e permessi" + exit 1 +fi + +# ============================================================================= +# 8. CREA TAG VERSIONE +# ============================================================================= + +log_info "Creo tag v$NEW_VERSION..." + +# Rimuovi tag locale se esiste +git tag -d "v$NEW_VERSION" 2>/dev/null || true + +# Crea nuovo tag +git tag -a "v$NEW_VERSION" -m "Release v$NEW_VERSION" + +# Push tag +if git push gitlab "v$NEW_VERSION" --force 2>&1; then + log_success "Tag v$NEW_VERSION creato su GitLab" +else + log_warning "Creazione tag fallita (non critico)" +fi + +# ============================================================================= +# 9. SUMMARY FINALE +# ============================================================================= + +echo "" +echo "==========================================" +echo -e "${GREEN}✅ DEPLOYMENT COMPLETATO${NC}" +echo "==========================================" +echo "" +echo "📦 Versione: $CURRENT_VERSION → $NEW_VERSION" +echo "🔄 Incremento: $INCREMENT_TYPE" +echo "💾 Database backup: $BACKUP_FILE" +echo "🌐 Repository: $GITLAB_REPO" +echo "🌿 Branch: $GITLAB_BRANCH" +echo "🏷️ Tag: v$NEW_VERSION" +echo "" +echo "==========================================" +echo "" + +# Cleanup: rimuovi remote con credenziali (sicurezza) +git remote remove gitlab 2>/dev/null || true + +log_success "Deployment completato con successo!" + +exit 0 diff --git a/git.env b/git.env new file mode 100644 index 0000000..927f3e5 --- /dev/null +++ b/git.env @@ -0,0 +1,20 @@ +# GitLab Deployment Credentials +# IMPORTANTE: Non committare questo file! Aggiungerlo a .gitignore + +# Username GitLab +GITLAB_USER=marco + +# Personal Access Token GitLab (con permessi: api, read_repository, write_repository) +# Crealo su: https://gitlab.com/-/profile/personal_access_tokens +GITLAB_TOKEN=553da84c94093919d46055d6ec37dfa2a03d0f46 + +# URL completo del repository GitLab (SSH o HTTPS) +# Esempio HTTPS: https://gitlab.com/username/vigilanzaturni.git +# Esempio SSH: git@gitlab.com:username/vigilanzaturni.git +GITLAB_REPO=https://git.alfacom.it/marco/ids.alfacom.it.git + +# Branch di destinazione (default: main) +GITLAB_BRANCH=main + +# Server di deployment (opzionale, per riferimento) +DEPLOYMENT_SERVER=vt.alfacom.it diff --git a/push-gitlab.sh b/push-gitlab.sh new file mode 100755 index 0000000..17b6b59 --- /dev/null +++ b/push-gitlab.sh @@ -0,0 +1,80 @@ +#!/bin/bash + +# ============================================================================= +# IDS - 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 "║ IDS - 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 $? diff --git a/version.json b/version.json new file mode 100644 index 0000000..5c7d369 --- /dev/null +++ b/version.json @@ -0,0 +1,12 @@ +{ + "version": "1.0.1", + "lastUpdate": "2025-11-17T08:45:53.250Z", + "changelog": [ + { + "version": "1.0.1", + "date": "2025-11-17", + "type": "patch", + "description": "Deployment automatico v1.0.1" + } + ] +} \ No newline at end of file