diff --git a/.gitea/workflows/pr-docker-deploy.yml b/.gitea/workflows/pr-docker-deploy.yml index 4d28946..ad1c3b6 100644 --- a/.gitea/workflows/pr-docker-deploy.yml +++ b/.gitea/workflows/pr-docker-deploy.yml @@ -72,31 +72,35 @@ jobs: - name: Detect added, deleted, and modified services id: detect_services run: | - echo "Getting services from main and ${{ github.ref_name }}" - yq '.services | keys | .[]' docker-compose-main.yml | sort > services_main.txt - yq '.services | keys | .[]' docker-compose-head.yml | sort > services_head.txt + | + set -euo pipefail - echo "Creating list of modified services..." - touch service_changes.txt + 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 - comm -13 services_main.txt services_head.txt | while read service; do - echo "$service: added" >> service_changes.txt - done + 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 - comm -12 services_main.txt services_head.txt | while read service; do - yq ".services[\"$service\"]" docker-compose-main.yml > tmp_main.yml - yq ".services[\"$service\"]" docker-compose-head.yml > tmp_head.yml - if ! diff -q tmp_main.yml tmp_head.yml > /dev/null; then - echo "$service: modified" >> service_changes.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-all --yaml-fix-merge-anchor-to-spec=true ".services[\"$service\"].image // \"\"" docker-compose-old-flat.yml) + new_image=$(yq eval-all --yaml-fix-merge-anchor-to-spec=true ".services[\"$service\"].image // \"\"" docker-compose-new-flat.yml) + + if [ "$old_image" != "$new_image" ]; then + echo "$service" >> service_changes.txt fi done - echo "Detected service changes:" - cat service_changes.txt + echo "Detected services with changed images:" + cat service_changes.txt || true - mod_svcs=$(cut -d':' -f1 service_changes.txt | sort | uniq | tr '\n' ' ' | sed 's/ *$//') + # Prepare multiline output for GitHub Actions echo "docker_svc_list<> "$GITHUB_OUTPUT" - echo "$mod_svcs" >> "$GITHUB_OUTPUT" + sort -u service_changes.txt >> "$GITHUB_OUTPUT" echo "EOF" >> "$GITHUB_OUTPUT" - name: List of Services for (Re)Deployment