Skip to content

Commit 1873664

Browse files
rename check_parent_stacks.sh to build_parents_file.sh, build_parents_file.sh now builds the parents yaml file and returns the children samples of the parent stacks.
Signed-off-by: Michael Valdron <mvaldron@redhat.com>
1 parent c09f427 commit 1873664

File tree

2 files changed

+240
-85
lines changed

2 files changed

+240
-85
lines changed

tests/build_parents_file.sh

Lines changed: 240 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,240 @@
1+
#!/bin/bash
2+
3+
# default samples file path
4+
samples_file=$(pwd)/extraDevfileEntries.yaml
5+
# Cached remote samples directory
6+
samples_dir=$(pwd)/samples/.cache
7+
# default stacks directory
8+
stacks_dir=${STACKS:-"$(pwd)/stacks"}
9+
parents_file=$(pwd)/parents.yaml
10+
11+
# YAML query cmd path
12+
YQ_PATH=${YQ_PATH:-yq}
13+
14+
# Read samples file as first argument
15+
# if unset use default samples file path
16+
if [ ! -z "${1}" ]; then
17+
samples_file=${1}
18+
fi
19+
20+
# Clones remote samples into cache directory
21+
clone_samples() {
22+
samples_len=$($YQ_PATH eval '.samples | length' ${samples_file})
23+
24+
# Removes old cached samples directory
25+
if [ -d ${samples_dir} ]; then
26+
rm -rf ${samples_dir}
27+
fi
28+
29+
for ((s_idx=0;s_idx<${samples_len};s_idx++)); do
30+
name=$($YQ_PATH eval .samples.${s_idx}.name ${samples_file})
31+
versions=($($YQ_PATH eval .samples.${s_idx}.versions.[].version ${samples_file}))
32+
33+
# Iterate through sample versions if sample has multi version support
34+
if [ ${#versions[@]} -ne 0 ]; then
35+
for ((v_idx=0;v_idx<${#versions[@]};v_idx++)); do
36+
remote_url=$($YQ_PATH eval .samples.${s_idx}.versions.${v_idx}.git.remotes.origin ${samples_file})
37+
38+
git clone --depth=1 ${remote_url} ${samples_dir}/${name}/${versions[$v_idx]}
39+
done
40+
else
41+
remote_url=$($YQ_PATH eval .samples.${s_idx}.git.remotes.origin ${samples_file})
42+
43+
git clone --depth=1 ${remote_url} ${samples_dir}/${name}
44+
fi
45+
done
46+
}
47+
48+
get_parent_version() {
49+
devfile=$1
50+
name=$2
51+
version=$($YQ_PATH eval .parent.version ${devfile})
52+
53+
if [ "${version}" == "null" ] && [ -f "${stacks_dir}/${name}/stack.yaml" ]; then
54+
version=$($YQ_PATH eval '.versions | filter(.default) | .[0].version' ${stacks_dir}/${name}/stack.yaml)
55+
fi
56+
57+
echo ${version}
58+
}
59+
60+
# Get parent index if exists, else returns -1
61+
parent_index() {
62+
name=$1
63+
version=$2
64+
65+
if [ -z "${version}" ]; then
66+
result=$($YQ_PATH eval ".parents | to_entries | filter(.value.name == \"${name}\") | .[0].key" ${parents_file})
67+
else
68+
result=$($YQ_PATH eval ".parents | to_entries | filter(.value.name == \"${name}\" and .value.version == \"${version}\") | .[0].key" ${parents_file})
69+
fi
70+
71+
if [ "${result}" == "null" ]; then
72+
echo "-1"
73+
else
74+
echo ${result}
75+
fi
76+
}
77+
78+
# Get child index if exists, else returns -1
79+
child_index() {
80+
parent_idx=$1
81+
name=$2
82+
version=$3
83+
84+
if [ -z "${version}" ]; then
85+
result=$($YQ_PATH eval ".parents.[${parent_idx}].children | to_entries | filter(.value.name == \"${name}\") | .[0].key" ${parents_file})
86+
else
87+
result=$($YQ_PATH eval ".parents.[${parent_idx}].children | to_entries | filter(.value.name == \"${name}\" and .value.version == \"${version}\") | .[0].key" ${parents_file})
88+
fi
89+
90+
if [ "${result}" == "null" ]; then
91+
echo "-1"
92+
else
93+
echo ${result}
94+
fi
95+
}
96+
97+
# Builds sample parents
98+
build_parents() {
99+
parent_name=$1
100+
parent_version=$2
101+
102+
if [ "${parent_version}" == "null" ]; then
103+
parent_version=""
104+
fi
105+
106+
if [ "${parent_name}" != "null" ]; then
107+
if [ ! -f ${parents_file} ]; then
108+
$YQ_PATH eval -n ".parents[0].name = \"${parent_name}\"" > ${parents_file}
109+
if [ "${parent_version}" != "" ]; then
110+
$YQ_PATH eval ".parents[0].version = \"${parent_version}\"" -i ${parents_file}
111+
fi
112+
113+
return
114+
fi
115+
116+
if [ "$($YQ_PATH eval .parents ${parents_file})" == "null" ]; then
117+
$YQ_PATH eval ".parents[0].name = \"${parent_name}\"" -i ${parents_file}
118+
if [ "${parent_version}" != "" ]; then
119+
$YQ_PATH eval ".parents[0].version = \"${parent_version}\"" -i ${parents_file}
120+
fi
121+
122+
return
123+
fi
124+
125+
parent_idx=$(parent_index ${parent_name} ${parent_version})
126+
if [ "${parent_idx}" == "-1" ]; then
127+
next_idx=$($YQ_PATH eval ".parents | length" ${parents_file})
128+
$YQ_PATH eval ".parents[${next_idx}].name = \"${parent_name}\"" -i ${parents_file}
129+
if [ "${parent_version}" != "" ]; then
130+
$YQ_PATH eval ".parents[${next_idx}].version = \"${parent_version}\"" -i ${parents_file}
131+
fi
132+
fi
133+
else
134+
return 1
135+
fi
136+
}
137+
138+
# Builds children of parent stacks
139+
build_children() {
140+
parent_name=$1
141+
parent_version=$2
142+
sample_name=$3
143+
sample_version=$4
144+
145+
parent_idx=$(parent_index ${parent_name} ${parent_version})
146+
147+
if [ "$($YQ_PATH eval .parents[${parent_idx}].children ${parents_file})" == "null" ]; then
148+
$YQ_PATH eval ".parents[${parent_idx}].children[0].name = \"${sample_name}\"" -i ${parents_file}
149+
if [ "${sample_version}" != "" ]; then
150+
$YQ_PATH eval ".parents[${parent_idx}].children[0].version = \"${sample_version}\"" -i ${parents_file}
151+
fi
152+
153+
return
154+
fi
155+
156+
child_idx=$(child_index ${parent_idx} ${sample_name} ${sample_version})
157+
if [ "${child_idx}" == "-1" ]; then
158+
next_idx=$($YQ_PATH eval ".parents[${parent_idx}].children | length" ${parents_file})
159+
$YQ_PATH eval ".parents[${parent_idx}].children[${next_idx}].name = \"${sample_name}\"" -i ${parents_file}
160+
if [ "${sample_version}" != "" ]; then
161+
$YQ_PATH eval ".parents[${parent_idx}].children[${next_idx}].version = \"${sample_version}\"" -i ${parents_file}
162+
fi
163+
fi
164+
}
165+
166+
build_parents_file() {
167+
samples_len=$($YQ_PATH eval '.samples | length' ${samples_file})
168+
169+
for ((s_idx=0;s_idx<${samples_len};s_idx++)); do
170+
sample_name=$($YQ_PATH eval .samples.${s_idx}.name ${samples_file})
171+
sample_versions=($($YQ_PATH eval .samples.${s_idx}.versions.[].version ${samples_file}))
172+
173+
# Iterate through sample versions if sample has multi version support
174+
if [ ${#sample_versions[@]} -ne 0 ]; then
175+
for ((v_idx=0;v_idx<${#sample_versions[@]};v_idx++)); do
176+
devfile=${samples_dir}/${sample_name}/${sample_versions[$v_idx]}/devfile.yaml
177+
parent_name=$($YQ_PATH eval .parent.id ${devfile})
178+
parent_version=$(get_parent_version ${devfile} ${parent_name})
179+
build_parents ${parent_name} ${parent_version}
180+
181+
if [ $? -eq 0 ]; then
182+
build_children "${parent_name}" "${parent_version}" "${sample_name}" "${sample_versions[$v_idx]}"
183+
fi
184+
done
185+
else
186+
devfile=${samples_dir}/${sample_name}/devfile.yaml
187+
parent_name=$($YQ_PATH eval .parent.id ${devfile})
188+
parent_version=$(get_parent_version ${devfile} ${parent_name})
189+
build_parents ${parent_name} ${parent_version}
190+
191+
if [ $? -eq 0 ]; then
192+
build_children "${parent_name}" "${parent_version}" "${sample_name}" ""
193+
fi
194+
fi
195+
done
196+
}
197+
198+
# Gets the children sample paths of parents.
199+
# When TEST_DELTA is set to true, only children of parents
200+
# with changes are returned.
201+
get_children_of_parents() {
202+
stack_dirs=$(bash $(pwd)/tests/get_stacks.sh)
203+
children=()
204+
205+
for stack_dir in $stack_dirs; do
206+
if [ "$(basename $(dirname $stack_dir))" == "." ]; then
207+
stack_name=$(basename $stack_dir)
208+
209+
names=($($YQ_PATH eval ".parents | filter(.name == \"${stack_name}\") | .[0].children.[].name" ${parents_file}))
210+
versions=($($YQ_PATH eval ".parents | filter(.name == \"${stack_name}\") | .[0].children.[].version" ${parents_file}))
211+
else
212+
stack_name=$(basename $(dirname $stack_dir))
213+
stack_version=$(basename $stack_dir)
214+
215+
names=($($YQ_PATH eval ".parents | filter(.name == \"${stack_name}\" and .version == \"${stack_version}\") | .[0].children.[].name" ${parents_file}))
216+
versions=($($YQ_PATH eval ".parents | filter(.name == \"${stack_name}\" and .version == \"${stack_version}\") | .[0].children.[].version" ${parents_file}))
217+
fi
218+
219+
220+
for ((c_idx=0;c_idx<${#names[@]};c_idx++)); do
221+
if [ "${versions[$c_idx]}" == "null" ]; then
222+
children+=("${names[$c_idx]}")
223+
else
224+
children+=("${names[$c_idx]}/${versions[$c_idx]}")
225+
fi
226+
done
227+
done
228+
229+
echo ${children[@]}
230+
}
231+
232+
clone_samples
233+
234+
if [ -f ${parents_file} ]; then
235+
rm ${parents_file}
236+
fi
237+
238+
build_parents_file
239+
240+
echo $(get_children_of_parents)

tests/check_parent_stacks.sh

Lines changed: 0 additions & 85 deletions
This file was deleted.

0 commit comments

Comments
 (0)