diff --git a/.gitea/workflows/pr-docker-deploy.yml b/.gitea/workflows/pr-docker-deploy.yml index e46de6b..d530272 100644 --- a/.gitea/workflows/pr-docker-deploy.yml +++ b/.gitea/workflows/pr-docker-deploy.yml @@ -77,34 +77,31 @@ jobs: - name: Detect added, deleted, and modified services id: detect_services run: | - set -euo pipefail + 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 - 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 "Creating list of modified services..." + touch service_changes.txt - 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 -13 services_main.txt services_head.txt | while read service; do + echo "$service: added" >> service_changes.txt + done - 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 + 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 fi done - echo "Detected services with changed images:" - cat service_changes.txt || true + echo "Detected service changes:" + cat service_changes.txt - # Prepare multiline output for GitHub Actions + mod_svcs=$(cut -d':' -f1 service_changes.txt | sort | uniq | tr '\n' ' ' | sed 's/ *$//') echo "docker_svc_list<> "$GITHUB_OUTPUT" - sort -u service_changes.txt >> "$GITHUB_OUTPUT" + echo "$mod_svcs" >> "$GITHUB_OUTPUT" echo "EOF" >> "$GITHUB_OUTPUT" - name: List of Services for (Re)Deployment