diff --git a/.gitea/workflows/pr-cloudflare-docker-deploy.yml b/.gitea/workflows/pr-cloudflare-docker-deploy.yml index 055e7210..444b7f9c 100644 --- a/.gitea/workflows/pr-cloudflare-docker-deploy.yml +++ b/.gitea/workflows/pr-cloudflare-docker-deploy.yml @@ -82,7 +82,7 @@ jobs: yq '.services | keys | .[]' docker-compose-main.yml | sort > services_main.txt yq '.services | keys | .[]' docker-compose-head.yml | sort > services_head.txt - echo "Creating list of modified services..." + echo "Creating list of service changes..." touch service_changes.txt # Detect newly added services @@ -90,6 +90,11 @@ jobs: [ -n "$service" ] && echo "$service: added" >> service_changes.txt done + # Detect removed services + comm -23 services_main.txt services_head.txt | 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 yq ".services[\"$service\"]" docker-compose-main.yml > tmp_main.yml @@ -102,44 +107,66 @@ jobs: echo "Detected service changes:" cat service_changes.txt || echo "None" - # Gather list of modified/added services - mod_svcs=$(cut -d':' -f1 service_changes.txt | sort | uniq) + # 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) + + # Gather list of modified/added services (ignore removed for build/test) + mod_svcs=$( (echo "$added_svcs"; echo "$modified_svcs") | tr ' ' '\n' | sort -u | grep -v '^$' || true) + if [ -z "$mod_svcs" ]; then echo "No modified or added services detected." echo "docker_svc_list<> "$GITHUB_OUTPUT" echo "" >> "$GITHUB_OUTPUT" echo "EOF" >> "$GITHUB_OUTPUT" - exit 0 + else + 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 + + all_svcs=$( (echo "$mod_svcs"; echo "$deps_list") | tr ' ' '\n' | sort -u) + + 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" fi - 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 - - all_svcs=$( (echo "$mod_svcs"; echo "$deps_list") | tr ' ' '\n' | sort -u) - - 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" + # Output removed services separately + echo "Removed services:" + echo "${removed_svcs:-None}" + echo "removed_svc_list<> "$GITHUB_OUTPUT" + echo "$removed_svcs" >> "$GITHUB_OUTPUT" echo "EOF" >> "$GITHUB_OUTPUT" - - name: List of Services for (Re)Deployment - run: | - echo -e "${{ steps.detect_services.outputs.docker_svc_list }}" + # Generate Markdown summary + { + echo "## 🧩 Service Change Summary" + echo "" + echo "| Change Type | Services |" + echo "|--------------|-----------|" + echo "| 🟢 **Added** | ${added_svcs:-None} |" + echo "| 🟡 **Modified** | ${modified_svcs:-None} |" + echo "| 🔴 **Removed** | ${removed_svcs:-None} |" + echo "" + echo "**Detected in:** \`${{ github.ref_name }}\` vs \`main\`" + } >> "$GITHUB_STEP_SUMMARY" + docker-compose-dry-run: name: Docker Compose Dry Run