...
This commit is contained in:
@@ -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]
|
||||||
|
|||||||
Reference in New Issue
Block a user