La cartella dei progetti era fissata in comune.sh su ~/Work/workspace/oto, cioe' la cartella di chi ha scritto gli script, e il CLAUDE.md diceva di clonare li' anche questo repository. Adesso la sceglie la persona: progetti.sh la vuole con --in (o CARTELLA_PROGETTI), la chiede se puo' e altrimenti si ferma; il CLAUDE.md ha la regola di chiederla sempre prima di scaricare. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
122 lines
4.7 KiB
Bash
Executable File
122 lines
4.7 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Valori e funzioni condivisi dagli script di questo repository.
|
|
# Qui non ci sono segreti: solo nomi di server e percorsi.
|
|
|
|
GITEA_URL="https://git.oto-farm.com"
|
|
GITEA_HOST="git.oto-farm.com"
|
|
AWS_REGIONE="eu-central-1"
|
|
AWS_ACCOUNT="170187898933"
|
|
AWS_CONSOLE="https://$AWS_ACCOUNT.signin.aws.amazon.com/console"
|
|
|
|
# Dove stanno le cose della persona, sul suo PC. Gli script dei progetti
|
|
# leggono da qui: non cambiarli senza cambiare anche loro.
|
|
TOKEN_GITEA_FILE="$HOME/.config/oto/gitea.token"
|
|
CHIAVE_SSH="$HOME/.ssh/oto_ed25519"
|
|
# I nomi con cui la cercano gli script dei progetti (STAGING_SSH_KEY e
|
|
# PRODUCTION_SSH_KEY in project.conf.sh): sono la stessa chiave, perche' sui
|
|
# server l'amministratore mette quella del profilo Gitea, cioe' questa.
|
|
CHIAVI_SSH_PROGETTI="$HOME/.ssh/oto_staging_ed25519 $HOME/.ssh/oto_production_ed25519"
|
|
|
|
# I server, con i nomi che usano gli script dei progetti. Staging e la
|
|
# produzione nuova stanno su rete privata: senza VPN non rispondono. Le
|
|
# produzioni sono due finche' i siti non sono migrati tutti: oto-production
|
|
# e' la macchina nuova (dal 05/10/2026), oto-production-old quella dove
|
|
# girano ancora i siti. Sulla nuova l'utente non e' admin.
|
|
STAGING_NOME="oto-staging"
|
|
STAGING_HOST="10.110.185.10"
|
|
STAGING_UTENTE="admin"
|
|
PRODUZIONE_NOME="oto-production"
|
|
PRODUZIONE_HOST="10.110.137.20"
|
|
PRODUZIONE_UTENTE="admin.produzione"
|
|
PRODUZIONE_VECCHIA_NOME="oto-production-old"
|
|
PRODUZIONE_VECCHIA_HOST="vps-production.oto-farm.com"
|
|
PRODUZIONE_VECCHIA_UTENTE="admin"
|
|
|
|
# Un parametro che ogni ruolo di sviluppo puo' leggere: serve a verifica.sh
|
|
# per sapere se l'accesso AWS arriva davvero alla cassaforte.
|
|
SSM_PROVA="/oto/_comune/MAILTRAP_SMTP_USER"
|
|
|
|
if [ -t 1 ] ; then
|
|
VERDE=$'\e[32m' ; ROSSO=$'\e[31m' ; GIALLO=$'\e[33m' ; GRASSETTO=$'\e[1m' ; FINE=$'\e[0m'
|
|
else
|
|
VERDE="" ; ROSSO="" ; GIALLO="" ; GRASSETTO="" ; FINE=""
|
|
fi
|
|
|
|
ok () { echo " ${VERDE}✔${FINE} $*" ; }
|
|
male () { echo " ${ROSSO}✘${FINE} $*" ; }
|
|
attento () { echo " ${GIALLO}!${FINE} $*" ; }
|
|
titolo () { echo ; echo "${GRASSETTO}$*${FINE}" ; }
|
|
|
|
c_e () { command -v "$1" > /dev/null 2>&1 ; }
|
|
|
|
# Su Mac Homebrew non si mette da solo nel PATH: senza, git e aws installati
|
|
# con brew sembrano mancare anche se ci sono.
|
|
if ! c_e brew ; then
|
|
for B in /opt/homebrew/bin/brew /usr/local/bin/brew ; do
|
|
[ -x "$B" ] && eval "$("$B" shellenv)" && break
|
|
done
|
|
fi
|
|
|
|
token_gitea () {
|
|
[ -s "$TOKEN_GITEA_FILE" ] && tr -d '[:space:]' < "$TOKEN_GITEA_FILE"
|
|
}
|
|
|
|
# Una chiamata all'API di Gitea col token salvato: il token passa a curl da
|
|
# stdin, non dalla riga di comando (che sul PC si vede con ps). Scrive il corpo
|
|
# della risposta e, sull'ultima riga, il codice HTTP (000 se Gitea non ha
|
|
# risposto). Gli argomenti in piu' vanno a curl (-X POST, -d ...).
|
|
api_gitea () {
|
|
local percorso="$1" ; shift
|
|
printf 'header = "Authorization: token %s"\n' "$(token_gitea)" \
|
|
| curl -s --max-time 15 -K - -w '\n%{http_code}' "$@" "$GITEA_URL/api/v1$percorso"
|
|
}
|
|
|
|
# Il valore di un campo testo da un JSON di Gitea, anche con gli spazi dopo i
|
|
# due punti. Basta per i campi che servono qui; un parser vero vorrebbe jq, che
|
|
# su Windows non c'e'.
|
|
campo_json () {
|
|
sed -n "s/.*\"$1\"[[:space:]]*:[[:space:]]*\"\([^\"]*\)\".*/\1/p" | head -n 1
|
|
}
|
|
|
|
# Stampa il nome utente Gitea del token. Esce 1 se il token manca o Gitea lo
|
|
# rifiuta, 2 se Gitea non risponde: "non vale" e "non so" sono due cose
|
|
# diverse, e la seconda non deve far chiedere di nuovo la password.
|
|
utente_gitea () {
|
|
local risposta codice
|
|
[ -n "$(token_gitea)" ] || return 1
|
|
risposta="$(api_gitea /user)"
|
|
codice="${risposta##*$'\n'}"
|
|
case "$codice" in
|
|
200) printf '%s' "${risposta%$'\n'*}" | campo_json login ;;
|
|
401|403) return 1 ;;
|
|
*) return 2 ;;
|
|
esac
|
|
}
|
|
|
|
# Controlla che l'identita' AWS (un ARN) sia l'utente IAM della persona
|
|
# nell'account di OTO, e non solo un utente con lo stesso nome altrove.
|
|
aws_e_di () {
|
|
[ "$1" = "arn:aws:iam::$AWS_ACCOUNT:user/$2" ]
|
|
}
|
|
|
|
# Le variabili che fanno usare alla AWS CLI un'altra chiave invece di quella
|
|
# scritta in ~/.aws/credentials: le stampa, senza i valori.
|
|
aws_variabili_in_conflitto () {
|
|
local v
|
|
for v in AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN AWS_PROFILE AWS_SHARED_CREDENTIALS_FILE ; do
|
|
[ -n "${!v:-}" ] && printf '%s ' "$v"
|
|
done
|
|
}
|
|
|
|
# La credenziale che git usa davvero per Gitea, chiesta a git e non letta da
|
|
# un file: e' quella che serve per clone e pull, qualunque gestore la tenga.
|
|
# Senza nessuna domanda: nel terminale di VS Code GIT_ASKPASS aprirebbe una
|
|
# finestra di login.
|
|
password_git_gitea () {
|
|
printf 'protocol=https\nhost=%s\n\n' "$GITEA_HOST" \
|
|
| env -u GIT_ASKPASS -u SSH_ASKPASS GIT_TERMINAL_PROMPT=0 GCM_INTERACTIVE=never \
|
|
git -c credential.interactive=never credential fill 2> /dev/null \
|
|
| sed -n 's/^password=//p'
|
|
}
|