65 lines
1.5 KiB
Bash
65 lines
1.5 KiB
Bash
#!/bin/bash
|
|
|
|
ARCH=""
|
|
MANIFEST_FILE="manifest.json"
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
--arch)
|
|
ARCH="$2"
|
|
shift 2
|
|
;;
|
|
esac
|
|
done
|
|
|
|
MANIFEST_CONTENT=$(cat "$MANIFEST_FILE")
|
|
|
|
if echo "$MANIFEST_CONTENT" | jq -e '.[0]' > /dev/null 2>&1; then
|
|
MANIFEST_ARRAY=$(echo "$MANIFEST_CONTENT" | jq -c '.[]')
|
|
else
|
|
MANIFEST_ARRAY=$(echo "$MANIFEST_CONTENT" | jq -c '.')
|
|
fi
|
|
|
|
arch_info=""
|
|
|
|
while IFS= read -r item; do
|
|
if [ -n "$item" ]; then
|
|
item_arch=$(echo "$item" | jq -r '.Descriptor.platform.architecture // empty')
|
|
item_variant=$(echo "$item" | jq -r '.Descriptor.platform.variant // empty')
|
|
|
|
if [[ "$ARCH" == *"$item_arch"* ]]; then
|
|
if [ -n "$VARIANT_PART" ]; then
|
|
if [ "$item_variant" = "$VARIANT_PART" ]; then
|
|
arch_info="$item"
|
|
break
|
|
fi
|
|
else
|
|
arch_info="$item"
|
|
break
|
|
fi
|
|
fi
|
|
fi
|
|
done <<< "$MANIFEST_ARRAY"
|
|
|
|
if [ -z "$arch_info" ]; then
|
|
echo "Error: No manifest found for architecture $ARCH"
|
|
exit 1
|
|
fi
|
|
|
|
total_size=0
|
|
layers=$(echo "$arch_info" | jq -c '.OCIManifest.layers[]')
|
|
|
|
if [ -z "$layers" ]; then
|
|
echo "Error: No layers found in the manifest"
|
|
exit 1
|
|
fi
|
|
|
|
while IFS= read -r layer; do
|
|
if [ -n "$layer" ]; then
|
|
size=$(echo "$layer" | jq -r '.size')
|
|
total_size=$((total_size + size))
|
|
fi
|
|
done <<< "$layers"
|
|
|
|
echo "$((total_size / 1024 / 1024)) MB"
|