diff --git a/.gitea/workflows/pr-cloudflare-docker-deploy.yml b/.gitea/workflows/pr-cloudflare-docker-deploy.yml index 52392688..ee4f4b23 100644 --- a/.gitea/workflows/pr-cloudflare-docker-deploy.yml +++ b/.gitea/workflows/pr-cloudflare-docker-deploy.yml @@ -78,6 +78,8 @@ jobs: - name: Detect added, deleted, and modified services id: detect_services run: | + set +e # prevent failure on non-zero exit codes + 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 @@ -86,17 +88,17 @@ jobs: touch service_changes.txt # Detect newly added services - comm -13 services_main.txt services_head.txt | while read service; do + comm -13 services_main.txt services_head.txt 2>/dev/null | while read service; do [ -n "$service" ] && echo "$service: added" >> service_changes.txt done # Detect removed services - comm -23 services_main.txt services_head.txt | while read service; do + comm -23 services_main.txt services_head.txt 2>/dev/null | while read service; do [ -n "$service" ] && echo "$service: removed" >> service_changes.txt done # Detect modified services - comm -12 services_main.txt services_head.txt | while read service; do + comm -12 services_main.txt services_head.txt 2>/dev/null | 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 @@ -107,10 +109,10 @@ jobs: echo "Detected service changes:" cat service_changes.txt || echo "None" - # Separate categories - added_svcs=$(grep -E ': added' service_changes.txt | cut -d':' -f1 | sort | uniq) - modified_svcs=$(grep -E ': modified' service_changes.txt | cut -d':' -f1 | sort | uniq) - removed_svcs=$(grep -E ': removed' service_changes.txt | cut -d':' -f1 | sort | uniq) + # Separate categories safely + added_svcs=$(grep -E ': added' service_changes.txt 2>/dev/null | cut -d':' -f1 | sort | uniq) + modified_svcs=$(grep -E ': modified' service_changes.txt 2>/dev/null | cut -d':' -f1 | sort | uniq) + removed_svcs=$(grep -E ': removed' service_changes.txt 2>/dev/null | cut -d':' -f1 | sort | uniq) # Gather list of modified/added services mod_svcs=$( (echo "$added_svcs"; echo "$modified_svcs") | tr ' ' '\n' | sort -u | grep -v '^$' || true) @@ -124,24 +126,27 @@ jobs: echo "Modified/added services:" echo "$mod_svcs" - # Include direct dependencies - echo "Resolving direct dependencies..." - deps_list="" - for svc in $mod_svcs; do - deps=$(yq -r ".services[\"$svc\"].depends_on | keys | .[]" docker-compose-head.yml 2>/dev/null || true) - if [ -n "$deps" ]; then - echo "$svc depends on:" - echo "$deps" - deps_list="$deps_list $deps" - fi - done + # Include direct dependencies (only if head file exists) + if [ -f docker-compose-head.yml ]; then + echo "Resolving direct dependencies..." + deps_list="" + for svc in $mod_svcs; do + deps=$(yq -r ".services[\"$svc\"].depends_on | keys | .[]" docker-compose-head.yml 2>/dev/null || true) + if [ -n "$deps" ]; then + echo "$svc depends on:" + echo "$deps" + deps_list="$deps_list $deps" + fi + done - all_svcs=$( (echo "$mod_svcs"; echo "$deps_list") | tr ' ' '\n' | sort -u) + all_svcs=$( (echo "$mod_svcs"; echo "$deps_list") | tr ' ' '\n' | sort -u) + else + all_svcs="$mod_svcs" + fi echo "Final service list (including direct dependencies):" echo "$all_svcs" - # Expose to workflow output echo "docker_svc_list<> "$GITHUB_OUTPUT" echo "$all_svcs" >> "$GITHUB_OUTPUT" echo "EOF" >> "$GITHUB_OUTPUT" @@ -157,6 +162,7 @@ jobs: # Always exit cleanly exit 0 + docker-compose-dry-run: name: Docker Compose Dry Run needs: [generate-service-list]