#!/bin/bash # Nuova versione: scrive la versione in src/version.js e package.json, verifica, fa il commit e crea il tag # annotato v. Con la versione cambiano gli indirizzi di immagini, musiche e voci (?v=): al prossimo # `make deploy` i browser le riscaricano invece di usare quelle in cache. # scripts/bump.sh [patch|minor|major] (default patch: 0.1.0 → 0.1.1) set -euo pipefail cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." PARTE=${1:-patch} [[ $PARTE =~ ^(patch|minor|major)$ ]] || { echo "uso: $0 [patch|minor|major]"; exit 2; } [[ $(git branch --show-current) == main ]] || { echo "✗ non sono su main"; exit 1; } [[ -z $(git status --porcelain) ]] || { echo "✗ ci sono modifiche non committate: prima il commit"; git status --short; exit 1; } ATTUALE=$(sed -n "s/^export const VERSION = '\([0-9.]*\)';$/\1/p" src/version.js) [[ $ATTUALE =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] || { echo "✗ versione non leggibile in src/version.js"; exit 1; } IFS=. read -r MA MI PA <<<"$ATTUALE" case $PARTE in major) NUOVA="$((MA + 1)).0.0" ;; minor) NUOVA="$MA.$((MI + 1)).0" ;; patch) NUOVA="$MA.$MI.$((PA + 1))" ;; esac git rev-parse -q --verify "refs/tags/v$NUOVA" >/dev/null && { echo "✗ il tag v$NUOVA esiste già"; exit 1; } sed -i "s/^export const VERSION = '$ATTUALE';$/export const VERSION = '$NUOVA';/" src/version.js python3 - "$NUOVA" <<'PY' import json, sys d = json.load(open('package.json')); d['version'] = sys.argv[1] open('package.json', 'w').write(json.dumps(d, indent=2, ensure_ascii=False) + '\n') PY if ! make -s verify; then git checkout -- src/version.js package.json echo "✗ verifiche fallite: versione rimessa a $ATTUALE"; exit 1 fi git commit -q -am "Versione $NUOVA" git tag -a "v$NUOVA" -m "La Leggenda del Regolo $NUOVA" echo "✓ $ATTUALE → $NUOVA (commit e tag v$NUOVA); per pubblicarla: make deploy"