Renovate PR comparison for deployment.
This commit is contained in:
@@ -49,40 +49,49 @@ 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 docker-compose.yml before merge (old)
|
||||||
id: services
|
|
||||||
run: |
|
run: |
|
||||||
git fetch origin ${{ github.event.pull_request.base.ref }}
|
git fetch origin main
|
||||||
|
if git ls-tree -r origin/main^1 --name-only | grep -q '^docker-compose.yml$'; then
|
||||||
# Extract image refs (service -> image) from base and head
|
git show origin/main^1:docker-compose.yml > docker-compose-old.yml
|
||||||
yq -r '.services | to_entries[] | "\(.key)=\(.value.image // "")"' docker-compose.yml \
|
else
|
||||||
| sort > services_head.txt
|
echo "services: {}" > docker-compose-old.yml
|
||||||
|
|
||||||
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."
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "docker_svc_list<<EOF" >> "$GITHUB_OUTPUT"
|
- name: Save docker-compose.yml after merge (new)
|
||||||
echo "$mod_svcs" >> "$GITHUB_OUTPUT"
|
run: |
|
||||||
echo "EOF" >> "$GITHUB_OUTPUT"
|
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
|
- name: List of Services for (Re)Deployment
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
Reference in New Issue
Block a user