Fixing service generation step in Renovate PR deploy flow.

This commit is contained in:
2025-09-30 09:19:56 -04:00
parent 7938eda2bd
commit 03415295cd
+34 -24
View File
@@ -48,42 +48,52 @@ jobs:
echo "::warning::This PR does not involve patch/minor/major/digest update. Skipping deployment." echo "::warning::This PR does not involve patch/minor/major/digest update. Skipping deployment."
exit 0 exit 0
- name: Get changed services from docker-compose.yml - name: Save both versions of docker-compose.yml
id: services
run: | run: |
git fetch origin ${{ github.event.pull_request.base.ref }} git fetch origin main
echo "Getting image refs from head..." if git ls-tree -r origin/main --name-only | grep -q '^docker-compose.yml$'; then
git show origin/main:docker-compose.yml > docker-compose-main.yml
else
echo "{}" > docker-compose-main.yml
fi
yq -r '.services | to_entries[] | "\(.key)=\(.value.image // "")"' docker-compose.yml \ cp docker-compose.yml docker-compose-head.yml
| sort > services_head.txt
echo "Getting image refs from base..." - name: Detect added, deleted, and modified services
git show origin/${{ github.event.pull_request.base.ref }}:docker-compose.yml \ id: detect_services
| yq -r '.services | to_entries[] | "\(.key)=\(.value.image // "")"' \ shell: bash
run: |
set -euo pipefail
echo "Getting services from main and head"
yq -r '.services | to_entries[] | "\(.key)=\(.value.image // "")"' docker-compose-main.yml \
| sort > services_main.txt | sort > services_main.txt
echo "Comparing images between base and head..." yq -r '.services | to_entries[] | "\(.key)=\(.value.image // "")"' docker-compose-head.yml \
touch service_changes.txt | sort > services_head.txt
while IFS== read -r svc img; do echo "Creating list of modified services..."
base_img=$(grep "^$svc=" services_main.txt | cut -d= -f2- || true) : > service_changes.txt
if [ "$img" != "$base_img" ]; then
echo "$svc" >> service_changes.txt # Find modified services (image changes)
fi comm -12 <(cut -d= -f1 services_main.txt | sort) \
done < services_head.txt <(cut -d= -f1 services_head.txt | sort) \
| while read service; do
main_image=$(grep "^$service=" services_main.txt | cut -d= -f2-)
head_image=$(grep "^$service=" services_head.txt | cut -d= -f2-)
if [ "$main_image" != "$head_image" ]; then
echo "$service: modified" >> service_changes.txt
fi
done
echo "Detected service changes:" echo "Detected service changes:"
cat service_changes.txt || true cat service_changes.txt || true
mod_svcs=$(sort -u service_changes.txt) # Flatten into single space-separated list for GHA output
if [ -z "$mod_svcs" ]; then mod_svcs=$(cut -d: -f1 service_changes.txt | sort -u | xargs echo -n)
echo "::warning::No service image changes detected. Skipping selective deployment."
fi
echo "docker_svc_list<<EOF" >> "$GITHUB_OUTPUT" echo "docker_svc_list=$mod_svcs" >> "$GITHUB_OUTPUT"
echo "$mod_svcs" >> "$GITHUB_OUTPUT"
echo "EOF" >> "$GITHUB_OUTPUT"
- name: List of Services for (Re)Deployment - name: List of Services for (Re)Deployment
run: | run: |