Skip to content

Commit a41507d

Browse files
committed
feat(cicd): Enhance desired_versions.sh to support valid component filtering and improved version extraction logic
1 parent e5aec61 commit a41507d

File tree

1 file changed

+44
-8
lines changed

1 file changed

+44
-8
lines changed

automation-tools/alchemist/generate_desired_versions.sh

Lines changed: 44 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,19 @@ generate_desired_versions() {
2020
cp -f "$1" "$generated_desired_version_file"
2121
source "$1"
2222

23+
declare -A valid_components=()
24+
local component_dir
25+
for component_dir in "$REPO_ROOT"/*/; do
26+
local component_base
27+
component_base="$(basename "${component_dir%/}")"
28+
[[ "$component_base" == archive_* ]] && continue
29+
[[ -f "$component_dir/component_recipe.json" || -f "$component_dir/component_manifest.json" ]] || continue
30+
component_base="${component_base//-/_}"
31+
component_base="${component_base^^}"
32+
valid_components["$component_base"]=1
33+
done
34+
valid_components["FRAMEWORK"]=1
35+
2336
while read -r file; do
2437
local response=""
2538
local extracted_version=""
@@ -46,10 +59,14 @@ generate_desired_versions() {
4659
local built_version
4760
built_version=$(tr -d '\r' < "$built_version_file" | head -n 1)
4861
if [[ -n "$built_version" ]]; then
49-
log info "Using built component_version '$built_version' for component '$component_name'"
50-
extracted_version="$built_version"
51-
sed -i "s/^export ${component_name}_DESIRED_VERSION=.*/export ${component_name}_DESIRED_VERSION=\"${extracted_version}\"/" "$generated_desired_version_file"
52-
continue
62+
if [[ "$built_version" =~ ^(latest|newest|preview)(\ on\ .*)?$ ]]; then
63+
log warn "Built component_version '$built_version' for component '$component_name' is not pinned; resolving instead"
64+
else
65+
log info "Using built component_version '$built_version' for component '$component_name'"
66+
extracted_version="$built_version"
67+
sed -i "s/^export ${component_name}_DESIRED_VERSION=.*/export ${component_name}_DESIRED_VERSION=\"${extracted_version}\"/" "$generated_desired_version_file"
68+
continue
69+
fi
5370
fi
5471
fi
5572

@@ -66,6 +83,7 @@ generate_desired_versions() {
6683
if [[ "$component_version" == "latest" ]]; then
6784
response=$(get_latest_flatpak_release_version "$component_source_url")
6885
fi
86+
[[ "$response" == "null" ]] && response=""
6987
if [[ -n "$response" ]]; then
7088
log info "Flatpak source version \"$response\" found for component \"$component_name\""
7189
extracted_version="$response"
@@ -83,6 +101,7 @@ generate_desired_versions() {
83101
elif [[ "$component_version" == "newest" ]]; then
84102
response=$(get_newest_github_release_version "$owner" "$repo")
85103
fi
104+
[[ "$response" == "null" ]] && response=""
86105
if [[ -n "$response" ]]; then
87106
log info "GitHub release source version \"$response\" found for component \"$component_name\""
88107
extracted_version="$response"
@@ -96,12 +115,13 @@ generate_desired_versions() {
96115
read -r instance owner repo <<< "$(parse_gitlab_url "$component_source_url")"
97116

98117
if [[ "$component_version" == "latest" ]]; then
99-
response=$(get_latest_github_release_version "$instance" "$owner" "$repo")
118+
response=$(get_latest_gitlab_release_version "$instance" "$owner" "$repo")
100119
elif [[ "$component_version" == "newest" ]]; then
101-
response=$(get_newest_github_release_version "$instance" "$owner" "$repo")
120+
response=$(get_newest_gitlab_release_version "$instance" "$owner" "$repo")
102121
fi
122+
[[ "$response" == "null" ]] && response=""
103123
if [[ -n "$response" ]]; then
104-
log info "GitHub release source version \"$response\" found for component \"$component_name\""
124+
log info "GitLab release source version \"$response\" found for component \"$component_name\""
105125
extracted_version="$response"
106126
else
107127
log info "Component \"$component_name\" not using \"latest\" or \"newest\" version, retaining current value \"$component_version\"."
@@ -115,6 +135,7 @@ generate_desired_versions() {
115135
if [[ "$component_version" == "latest" ]]; then
116136
response=$(get_latest_git_commit_version "$owner" "$repo")
117137
fi
138+
[[ "$response" == "null" ]] && response=""
118139
if [[ -n "$response" ]]; then
119140
log info "Git source version \"$response\" found for component \"$component_name\""
120141
extracted_version="$response"
@@ -130,7 +151,22 @@ generate_desired_versions() {
130151

131152
sed -i "s/^export ${component_name}_DESIRED_VERSION=.*/export ${component_name}_DESIRED_VERSION=\"${extracted_version}\"/" "$generated_desired_version_file"
132153

133-
done < <(find "$PWD" -maxdepth 2 -type f -name "component_recipe.json" -not -path "$PWD/framework/component_recipe.json")
154+
done < <(
155+
find "$REPO_ROOT" -mindepth 2 -maxdepth 2 -type f -name "component_recipe.json" \
156+
-not -path "$REPO_ROOT/framework/component_recipe.json" \
157+
-not -path "$REPO_ROOT/archive_*/*"
158+
)
159+
160+
local valid_regex
161+
valid_regex=$(printf '%s|' "${!valid_components[@]}")
162+
valid_regex="${valid_regex%|}"
163+
if [[ -n "$valid_regex" ]]; then
164+
awk -v re="^export ("$valid_regex")_DESIRED_VERSION=" '
165+
/^export [A-Z0-9_]+_DESIRED_VERSION=/ { if ($0 ~ re) print; next }
166+
{ print }
167+
' "$generated_desired_version_file" > "${generated_desired_version_file}.tmp"
168+
mv -f "${generated_desired_version_file}.tmp" "$generated_desired_version_file"
169+
fi
134170
}
135171

136172
parse_args() {

0 commit comments

Comments
 (0)