mirror of
https://github.com/outbackdingo/cozystack.git
synced 2026-01-27 18:18:41 +00:00
63 lines
1.9 KiB
Bash
Executable File
63 lines
1.9 KiB
Bash
Executable File
#!/bin/sh
|
|
set -e
|
|
|
|
file=versions_map
|
|
|
|
charts=$(find . -mindepth 2 -maxdepth 2 -name Chart.yaml | awk 'sub("/Chart.yaml", "")')
|
|
|
|
new_map=$(
|
|
for chart in $charts; do
|
|
awk '/^name:/ {chart=$2} /^version:/ {version=$2} END{printf "%s %s %s\n", chart, version, "HEAD"}' "$chart/Chart.yaml"
|
|
done
|
|
)
|
|
|
|
if [ ! -f "$file" ] || [ ! -s "$file" ]; then
|
|
echo "$new_map" > "$file"
|
|
exit 0
|
|
fi
|
|
|
|
miss_map=$(echo "$new_map" | awk 'NR==FNR { nm[$1 " " $2] = $3; next } { if (!($1 " " $2 in nm)) print $1, $2, $3}' - "$file")
|
|
|
|
# search accross all tags sorted by version
|
|
search_commits=$(git ls-remote --tags origin | awk -F/ '$3 ~ /v[0-9]+.[0-9]+.[0-9]+/ {print}' | sort -k2,2 -rV | awk '{print $1}')
|
|
|
|
resolved_miss_map=$(
|
|
echo "$miss_map" | while read -r chart version commit; do
|
|
# if version is found in HEAD, it's HEAD
|
|
if [ $(awk '$1 == "version:" {print $2}' ./${chart}/Chart.yaml) = "${version}" ]; then
|
|
echo "$chart $version HEAD"
|
|
continue
|
|
fi
|
|
|
|
# if commit is not HEAD, check if it's valid
|
|
if [ $commit != "HEAD" ]; then
|
|
if [ $(git show "${commit}:./${chart}/Chart.yaml" 2>/dev/null | awk '$1 == "version:" {print $2}') != "${version}" ]; then
|
|
echo "Commit $commit for $chart $version is not valid" >&2
|
|
exit 1
|
|
fi
|
|
|
|
commit=$(git rev-parse --short "$commit")
|
|
echo "$chart $version $commit"
|
|
continue
|
|
fi
|
|
|
|
# if commit is HEAD, but version is not found in HEAD, check all tags
|
|
found_tag=""
|
|
for tag in $search_commits; do
|
|
if [ $(git show "${tag}:./${chart}/Chart.yaml" 2>/dev/null | awk '$1 == "version:" {print $2}') = "${version}" ]; then
|
|
found_tag=$(git rev-parse --short "${tag}")
|
|
break
|
|
fi
|
|
done
|
|
|
|
if [ -z "$found_tag" ]; then
|
|
echo "Can't find $chart $version in any version tag, removing it" >&2
|
|
continue
|
|
fi
|
|
|
|
echo "$chart $version $found_tag"
|
|
done
|
|
)
|
|
|
|
printf "%s\n" "$new_map" "$resolved_miss_map" | sort -k1,1 -k2,2 -V | awk '$1' > "$file"
|