accept list of compose repo

This commit is contained in:
2026-06-04 14:00:20 +02:00
parent c79505ac23
commit fd54b3ed31
+45 -61
View File
@@ -3,8 +3,8 @@ name: Maven Release (reusable)
on:
workflow_call:
inputs:
compose-repo:
description: "Repo docker-compose da aggiornare (es. Biters/bitwork). Vuoto = skip."
compose-repos:
description: "Repo docker-compose da aggiornare, separati da virgola (es. Biters/bitwork,Biters/altro). Vuoto = skip."
required: false
type: string
default: ""
@@ -188,42 +188,22 @@ jobs:
git rebase origin/${{ github.ref_name }}
git push origin develop --force-with-lease
# ── Aggiorna docker-compose (opzionale) ────────────────────
- name: Clona repo compose e aggiorna versione immagine
if: ${{ inputs.compose-repo != '' }}
# ── Aggiorna docker-compose (opzionale, multi-repo) ────────
- name: Aggiorna docker-compose nei repo compose
if: ${{ inputs.compose-repos != '' }}
run: |
VERSION="${{ steps.version.outputs.RELEASE_VERSION }}"
PROJECT_NAME="${{ steps.version.outputs.PROJECT_NAME }}"
REGISTRY="${{ inputs.docker-registry }}"
COMPOSE_REPO="${{ inputs.compose-repo }}"
git clone "https://biters.gitea:${GITEA_TOKEN}@git.biters.it/${COMPOSE_REPO}.git" /tmp/compose-repo
cd /tmp/compose-repo
git config user.name "CI Release Bot"
git config user.email "ci@biters.it"
ESCAPED_REGISTRY=$(echo "$REGISTRY" | sed 's/\./\\./g')
find . -name 'docker-compose*.yml' -exec \
sed -i "s|\(${ESCAPED_REGISTRY}/biters/${PROJECT_NAME}:\)[^ \"']*|\1${VERSION}|g" {} +
- name: Verifica variabili environment
if: ${{ inputs.compose-repo != '' }}
run: |
VERSION="${{ steps.version.outputs.RELEASE_VERSION }}"
PROJECT_NAME="${{ steps.version.outputs.PROJECT_NAME }}"
COMPOSE_REPO="${{ inputs.compose-repo }}"
APP_YML="${GITHUB_WORKSPACE}/src/main/resources/application.yml"
if [ ! -f "$APP_YML" ]; then
echo "application.yml non trovato, skip verifica variabili."
exit 0
fi
ALL_PLACEHOLDERS=$(grep -oP '\$\{[^}]+\}' "$APP_YML" | sort -u)
# ── Estrai variabili da application.yml (una volta sola) ──
APP_VARS_REQUIRED=""
APP_VARS_WITH_DEFAULT=""
APP_VARS_ALL=""
if [ -f "$APP_YML" ]; then
ALL_PLACEHOLDERS=$(grep -oP '\$\{[^}]+\}' "$APP_YML" | sort -u)
for ph in $ALL_PLACEHOLDERS; do
var=$(echo "$ph" | sed 's/\${//;s/[:}].*//')
echo "$var" | grep -q '\.' && continue
@@ -236,31 +216,47 @@ jobs:
APP_VARS_REQUIRED=$(echo "$APP_VARS_REQUIRED" | grep -v '^$' | sort -u)
APP_VARS_WITH_DEFAULT=$(echo "$APP_VARS_WITH_DEFAULT" | grep -v '^$' | sort -u)
APP_VARS_ALL=$(printf '%s\n%s' "$APP_VARS_REQUIRED" "$APP_VARS_WITH_DEFAULT" | grep -v '^$' | sort -u)
echo "Variabili application.yml: $(echo "$APP_VARS_REQUIRED" | wc -w) obbligatorie, $(echo "$APP_VARS_WITH_DEFAULT" | wc -w) con default"
fi
echo "Variabili application.yml:"
echo " Obbligatorie: $(echo "$APP_VARS_REQUIRED" | wc -w)"
echo " Con default: $(echo "$APP_VARS_WITH_DEFAULT" | wc -w)"
# ── Cicla su ogni repo compose ──
IFS=',' read -ra REPO_LIST <<< "${{ inputs.compose-repos }}"
for COMPOSE_REPO in "${REPO_LIST[@]}"; do
COMPOSE_REPO=$(echo "$COMPOSE_REPO" | xargs)
[ -z "$COMPOSE_REPO" ] && continue
REPO_DIR="/tmp/compose-$(echo "$COMPOSE_REPO" | tr '/' '-')"
echo ""
echo "════════════════════════════════════════"
echo " Repo: ${COMPOSE_REPO}"
echo "════════════════════════════════════════"
# ── Clone e aggiorna versione immagine ──
git clone "https://biters.gitea:${GITEA_TOKEN}@git.biters.it/${COMPOSE_REPO}.git" "$REPO_DIR"
cd "$REPO_DIR"
git config user.name "CI Release Bot"
git config user.email "ci@biters.it"
find . -name 'docker-compose*.yml' -exec \
sed -i "s|\(${ESCAPED_REGISTRY}/biters/${PROJECT_NAME}:\)[^ \"']*|\1${VERSION}|g" {} +
# ── Verifica variabili environment ──
if [ -n "$APP_VARS_ALL" ]; then
MISSING=""
cd /tmp/compose-repo
for compose_file in docker-compose-*.yml; do
[ -f "$compose_file" ] || continue
ENV_NAME=${compose_file#docker-compose-}
ENV_NAME=${ENV_NAME%.yml}
ENV_FILE=".env_${ENV_NAME}"
echo ""
echo "── ${compose_file} ──"
echo " ── ${compose_file} ──"
COMMON_VARS=$(yq '.services["common-env-hc"].environment // {} | keys | .[]' \
"$compose_file" 2>/dev/null || true)
SVC_VARS=$(yq ".services | to_entries[] |
select(.value.image // \"\" | test(\"${PROJECT_NAME}\")) |
.value.environment // {} | keys | .[]" \
"$compose_file" 2>/dev/null || true)
COMPOSE_VARS=$(printf '%s\n%s' "$COMMON_VARS" "$SVC_VARS" | grep -v '^$' | sort -u)
for var in $APP_VARS_ALL; do
@@ -281,21 +277,13 @@ jobs:
fi
done
# Separa REQUIRED da HAS_DEFAULT
MISSING_REQUIRED=$(printf '%b' "$MISSING" | grep "REQUIRED" || true)
MISSING_DEFAULTS=$(printf '%b' "$MISSING" | grep "HAS_DEFAULT" || true)
if [ -n "$MISSING_DEFAULTS" ] && [ -z "$MISSING_REQUIRED" ]; then
echo ""
echo "WARNING: variabili con default mancanti nei compose (non bloccante):"
printf '%b' "$MISSING"
echo ""
echo "Queste variabili hanno un valore di default in application.yml — verificare se adeguato."
echo " WARNING: variabili con default mancanti (non bloccante)"
elif [ -n "$MISSING_REQUIRED" ]; then
echo ""
echo "WARNING: variabili obbligatorie mancanti nei compose:"
printf '%b' "$MISSING"
echo " WARNING: variabili obbligatorie mancanti"
ISSUE_BODY="## Variabili mancanti — ${PROJECT_NAME} v${VERSION}
La pipeline di release ha rilevato variabili non censite:
@@ -318,25 +306,21 @@ jobs:
--arg title "[CI] Variabili mancanti: ${PROJECT_NAME} v${VERSION}" \
--arg body "$ISSUE_BODY" \
'{title: $title, body: $body}')"
echo ""
echo "Issue creata su ${COMPOSE_REPO}."
echo " Issue creata su ${COMPOSE_REPO}."
else
echo "Tutte le variabili sono correttamente censite."
echo " Tutte le variabili censite."
fi
fi
- name: Push docker-compose aggiornato
if: ${{ inputs.compose-repo != '' }}
run: |
VERSION="${{ steps.version.outputs.RELEASE_VERSION }}"
PROJECT_NAME="${{ steps.version.outputs.PROJECT_NAME }}"
cd /tmp/compose-repo
# ── Push se ci sono modifiche ──
if git diff --quiet; then
echo "Nessuna modifica necessaria ai docker-compose"
echo " Nessuna modifica necessaria"
else
git add -A
git commit -m "chore(${PROJECT_NAME}): aggiorna immagine a ${VERSION}"
git push origin HEAD
echo "Docker-compose aggiornati con versione ${VERSION}"
echo " Docker-compose aggiornati con versione ${VERSION}"
fi
cd "$GITHUB_WORKSPACE"
done