Skip to content

Commit 45dd814

Browse files
committed
Not to be lost.
1 parent 835c2bb commit 45dd814

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

extract-profiles.sh

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
#!/bin/bash
2+
set -e
3+
4+
original_file="docker-compose.yaml"
5+
6+
# Function to add a service and its dependencies to the included_services list
7+
add_service_and_dependencies() {
8+
local service=$1
9+
# Mark the service as included
10+
included_services["$service"]=1
11+
# Check if the service has dependencies
12+
if yq e ".services.${service}.depends_on" "$original_file" -e > /dev/null; then
13+
# Read dependencies of the service
14+
local dependencies=($(yq e ".services.${service}.depends_on | keys" "$original_file" -o json | jq -r '.[]'))
15+
# Recursively add dependencies
16+
for dependency in "${dependencies[@]}"; do
17+
if [[ -z "${included_services["$dependency"]}" ]]; then
18+
add_service_and_dependencies "$dependency"
19+
fi
20+
done
21+
fi
22+
}
23+
24+
# Step 1: Collect all dependencies
25+
declare -A all_dependencies
26+
services=$(yq e '.services | keys' "$original_file" -o json | jq -r '.[]')
27+
for service in $services; do
28+
dependencies=$(yq e ".services.$service.depends_on | keys" "$original_file" -o json | jq -r '.[]')
29+
for dependency in $dependencies; do
30+
all_dependencies["$dependency"]=1
31+
done
32+
done
33+
34+
# Step 2: Process each profile and include dependencies
35+
for profile in $(yq e '.services[].profiles[]?' "$original_file" | sort -u); do
36+
echo "Processing profile: $profile"
37+
# Initialize an associative array to track included services
38+
declare -A included_services
39+
# Find and include services matching the profile
40+
matching_services=$(yq e ".services | with_entries(select(.value.profiles[]? == \"$profile\")) | keys" "$original_file" -o json | jq -r '.[]')
41+
for service in $matching_services; do
42+
add_service_and_dependencies "$service"
43+
done
44+
# Correctly format the list of included services for yq query
45+
included_services_keys=$(printf "'%s'," "${!included_services[@]}")
46+
included_services_keys="[${included_services_keys%,}]" # Remove trailing comma and wrap in brackets
47+
48+
# Generate the docker-compose file for the profile
49+
echo "Generating docker-compose-$profile.yaml"
50+
yq e ".services | with_entries(select(.key as \$k | .key == \"$included_services_list\"))" "$original_file" > "docker-compose-$profile.yaml"
51+
done

0 commit comments

Comments
 (0)