70 lines
1.9 KiB
Bash
Executable File
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"
|