From 1211e8db0a56756bd5a1acca3a9125cc2b5c273c Mon Sep 17 00:00:00 2001 From: "Trez.One" Date: Tue, 30 Sep 2025 15:52:08 -0400 Subject: [PATCH] Renovate PR comparison for deployment. --- .gitea/workflows/renovate-pr-deploy.yml | 71 ++++++++++++++----------- 1 file changed, 40 insertions(+), 31 deletions(-) diff --git a/.gitea/workflows/renovate-pr-deploy.yml b/.gitea/workflows/renovate-pr-deploy.yml index a43936c..9706988 100644 --- a/.gitea/workflows/renovate-pr-deploy.yml +++ b/.gitea/workflows/renovate-pr-deploy.yml @@ -49,40 +49,49 @@ jobs: echo "::warning::This PR does not involve patch/minor/major/digest update. Skipping deployment." exit 0 - - name: Get changed services from docker-compose.yml - id: services + - name: Save docker-compose.yml before merge (old) run: | - git fetch origin ${{ github.event.pull_request.base.ref }} - - # Extract image refs (service -> image) from base and head - yq -r '.services | to_entries[] | "\(.key)=\(.value.image // "")"' docker-compose.yml \ - | sort > services_head.txt - - git show origin/${{ github.event.pull_request.base.ref }}:docker-compose.yml \ - | yq -r '.services | to_entries[] | "\(.key)=\(.value.image // "")"' \ - | sort > services_main.txt - - echo "Comparing images between base and head..." - touch service_changes.txt - - while IFS== read -r svc img; do - base_img=$(grep "^$svc=" services_main.txt | cut -d= -f2- || true) - if [ "$img" != "$base_img" ]; then - echo "$svc" >> service_changes.txt - fi - done < services_head.txt - - echo "Detected service changes:" - cat service_changes.txt || true - - mod_svcs=$(sort -u service_changes.txt) - if [ -z "$mod_svcs" ]; then - echo "::warning::No service image changes detected. Skipping selective deployment." + git fetch origin main + if git ls-tree -r origin/main^1 --name-only | grep -q '^docker-compose.yml$'; then + git show origin/main^1:docker-compose.yml > docker-compose-old.yml + else + echo "services: {}" > docker-compose-old.yml fi - echo "docker_svc_list<> "$GITHUB_OUTPUT" - echo "$mod_svcs" >> "$GITHUB_OUTPUT" - echo "EOF" >> "$GITHUB_OUTPUT" + - name: Save docker-compose.yml after merge (new) + run: | + git show origin/main:docker-compose.yml > docker-compose-new.yml + + - name: Detect services with image tag/digest changes + id: detect_services + run: | + set -euo pipefail + + echo "Flattening docker-compose files..." + yq eval '... comments=""' docker-compose-old.yml > docker-compose-old-flat.yml + yq eval '... comments=""' docker-compose-new.yml > docker-compose-new-flat.yml + + echo "Getting service names..." + yq eval '.services | keys | .[]' docker-compose-old-flat.yml | sort > services_old.txt + yq eval '.services | keys | .[]' docker-compose-new-flat.yml | sort > services_new.txt + + echo "Checking for image changes..." + : > service_changes.txt + + comm -12 services_old.txt services_new.txt | while read service; do + old_image=$(yq eval ".services.\"$service\".image // \"\"" docker-compose-old-flat.yml) + new_image=$(yq eval ".services.\"$service\".image // \"\"" docker-compose-new-flat.yml) + + if [ "$old_image" != "$new_image" ]; then + echo "$service" >> service_changes.txt + fi + done + + echo "Detected services with changed images:" + cat service_changes.txt || true + + mod_svcs=$(sort -u service_changes.txt | xargs echo -n) + echo "docker_svc_list=$mod_svcs" >> "$GITHUB_OUTPUT" - name: List of Services for (Re)Deployment run: |