stack/src/make/update.sh

70 lines
1.9 KiB
Bash
Executable File

#!/bin/sh
TARGET="Containerfile.tools"
SOURCE="https://codeberg.org/stagex/stagex/raw/branch/main/digests"
STAGES="core user pallet bootstrap"
TMPFILE="$(mktemp)"
DIGESTS_TMP="$(mktemp)"
for stage in $STAGES; do
curl -fsSL "$SOURCE/$stage.txt" | while read -r digest name; do
echo "$name $digest" >> "$DIGESTS_TMP"
done
done
while IFS= read -r line; do
case "$line" in
FROM*stagex/*)
full_image="$(printf '%s' "$line" | awk '{print $2}')"
base="${full_image%@sha256:*}"
prefix="${base%%stagex/*}"
registry="${prefix%/}"
path="stagex/${base#*stagex/}"
rest="${path#stagex/}"
if echo "$rest" | grep -q ':'; then
name="${rest%%:*}"
tag="${rest#*:}"
else
name="$rest"
tag=""
fi
digest="$(awk -v n="$name" '$1==n{print $2; exit}' "$DIGESTS_TMP")"
if [ -z "$digest" ]; then
for stage in $STAGES; do
staged_name="$stage-$name"
digest="$(awk -v n="$staged_name" '$1==n{print $2; exit}' "$DIGESTS_TMP")"
if [ -n "$digest" ]; then
name="$staged_name"
break
fi
done
fi
if [ -n "$digest" ]; then
if [ -n "$registry" ]; then
image_ref="$registry/stagex/$name"
else
image_ref="stagex/$name"
fi
if [ -n "$tag" ]; then
image_ref="$image_ref:$tag"
fi
echo "FROM $image_ref@sha256:$digest AS $name" >> "$TMPFILE"
else
echo "$line" >> "$TMPFILE"
fi
;;
*)
echo "$line" >> "$TMPFILE"
;;
esac
done < "$TARGET"
mv "$TMPFILE" "$TARGET"
rm -f "$DIGESTS_TMP"