accept list of compose repo
This commit is contained in:
@@ -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} ──"
|
||||
|
||||
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}."
|
||||
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}"
|
||||
fi
|
||||
|
||||
cd "$GITHUB_WORKSPACE"
|
||||
done
|
||||
|
||||
Reference in New Issue
Block a user