This commit is contained in:
2025-10-28 06:54:50 -04:00
parent 6257393865
commit 8f871bf2b4
@@ -78,6 +78,8 @@ jobs:
- name: Detect added, deleted, and modified services - name: Detect added, deleted, and modified services
id: detect_services id: detect_services
run: | run: |
set +e # prevent failure on non-zero exit codes
echo "Getting services from main and ${{ github.ref_name }}" 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-main.yml | sort > services_main.txt
yq '.services | keys | .[]' docker-compose-head.yml | sort > services_head.txt yq '.services | keys | .[]' docker-compose-head.yml | sort > services_head.txt
@@ -86,17 +88,17 @@ jobs:
touch service_changes.txt touch service_changes.txt
# Detect newly added services # 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 [ -n "$service" ] && echo "$service: added" >> service_changes.txt
done done
# Detect removed services # 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 [ -n "$service" ] && echo "$service: removed" >> service_changes.txt
done done
# Detect modified services # 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-main.yml > tmp_main.yml
yq ".services[\"$service\"]" docker-compose-head.yml > tmp_head.yml yq ".services[\"$service\"]" docker-compose-head.yml > tmp_head.yml
if ! diff -q tmp_main.yml tmp_head.yml > /dev/null; then if ! diff -q tmp_main.yml tmp_head.yml > /dev/null; then
@@ -107,10 +109,10 @@ jobs:
echo "Detected service changes:" echo "Detected service changes:"
cat service_changes.txt || echo "None" cat service_changes.txt || echo "None"
# Separate categories # Separate categories safely
added_svcs=$(grep -E ': added' service_changes.txt | cut -d':' -f1 | sort | uniq) added_svcs=$(grep -E ': added' service_changes.txt 2>/dev/null | cut -d':' -f1 | sort | uniq)
modified_svcs=$(grep -E ': modified' service_changes.txt | 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 | 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 # Gather list of modified/added services
mod_svcs=$( (echo "$added_svcs"; echo "$modified_svcs") | tr ' ' '\n' | sort -u | grep -v '^$' || true) 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 "Modified/added services:"
echo "$mod_svcs" echo "$mod_svcs"
# Include direct dependencies # Include direct dependencies (only if head file exists)
echo "Resolving direct dependencies..." if [ -f docker-compose-head.yml ]; then
deps_list="" echo "Resolving direct dependencies..."
for svc in $mod_svcs; do deps_list=""
deps=$(yq -r ".services[\"$svc\"].depends_on | keys | .[]" docker-compose-head.yml 2>/dev/null || true) for svc in $mod_svcs; do
if [ -n "$deps" ]; then deps=$(yq -r ".services[\"$svc\"].depends_on | keys | .[]" docker-compose-head.yml 2>/dev/null || true)
echo "$svc depends on:" if [ -n "$deps" ]; then
echo "$deps" echo "$svc depends on:"
deps_list="$deps_list $deps" echo "$deps"
fi deps_list="$deps_list $deps"
done 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 "Final service list (including direct dependencies):"
echo "$all_svcs" echo "$all_svcs"
# Expose to workflow output
echo "docker_svc_list<<EOF" >> "$GITHUB_OUTPUT" echo "docker_svc_list<<EOF" >> "$GITHUB_OUTPUT"
echo "$all_svcs" >> "$GITHUB_OUTPUT" echo "$all_svcs" >> "$GITHUB_OUTPUT"
echo "EOF" >> "$GITHUB_OUTPUT" echo "EOF" >> "$GITHUB_OUTPUT"
@@ -157,6 +162,7 @@ jobs:
# Always exit cleanly # Always exit cleanly
exit 0 exit 0
docker-compose-dry-run: docker-compose-dry-run:
name: Docker Compose Dry Run name: Docker Compose Dry Run
needs: [generate-service-list] needs: [generate-service-list]