uncompressed docker size with buildx

This commit is contained in:
Ralf Vogler 2025-05-25 11:23:32 +02:00
parent 3065ad1c5e
commit 07a2c81f05

View file

@ -95,19 +95,19 @@ jobs:
# https://gist.github.com/MichaelSimons/fb588539dcefd9b5fdf45ba04c302db6 # https://gist.github.com/MichaelSimons/fb588539dcefd9b5fdf45ba04c302db6
- name: Docker (un)compressed sizes - name: Docker (un)compressed sizes
run: | run: |
echo '```console' >> "$GITHUB_STEP_SUMMARY" IMG=ghcr.io/${{ github.actor }}/free-games-claimer:${{env.IMAGE_TAG}}
# echo '# Uncompressed size (max, not size on disk due to sharing):' emd() { echo "$@" | tee -a "$GITHUB_STEP_SUMMARY"; }
# echo '$ docker image ls' >> "$GITHUB_STEP_SUMMARY" cmd() { echo "\$ $@" | tee -a "$GITHUB_STEP_SUMMARY"; "$@" | tee -a "$GITHUB_STEP_SUMMARY"; }
# docker image ls | tee -a "$GITHUB_STEP_SUMMARY" emd '```console'
# echo emd "# Compressed (download) sizes:"
# echo '# size = unique + shared:'
# echo '$ docker system df -v' >> "$GITHUB_STEP_SUMMARY"
# docker system df -v | tee -a "$GITHUB_STEP_SUMMARY"
## the above work locally, but in CI with buildx just list moby/buildkit and tonistiigi/binfmt
echo "# Compressed sizes:" >> "$GITHUB_STEP_SUMMARY"
dockersize() { docker manifest inspect -v "$1" | jq -c 'if type == "array" then .[] else . end' | jq -r '[ ( .Descriptor.platform | [ .os, .architecture, .variant, ."os.version" ] | del(..|nulls) | join("/") ), ( [ ( .OCIManifest // .SchemaV2Manifest ).layers[].size ] | add ) ] | join(" ")' | numfmt --to iec --format '%.2f' --field 2 | sort | column -t ; } dockersize() { docker manifest inspect -v "$1" | jq -c 'if type == "array" then .[] else . end' | jq -r '[ ( .Descriptor.platform | [ .os, .architecture, .variant, ."os.version" ] | del(..|nulls) | join("/") ), ( [ ( .OCIManifest // .SchemaV2Manifest ).layers[].size ] | add ) ] | join(" ")' | numfmt --to iec --format '%.2f' --field 2 | sort | column -t ; }
dockersize ghcr.io/${{ github.actor }}/free-games-claimer:${{env.IMAGE_TAG}} | tee -a "$GITHUB_STEP_SUMMARY" cmd dockersize "$IMG"
log() { echo "\$ $@" >> "$GITHUB_STEP_SUMMARY"; "$@" >> "$GITHUB_STEP_SUMMARY"; } cmd docker buildx history inspect
log docker buildx history inspect cmd docker buildx du
log docker buildx du ## in CI with buildx `docker image ls` just lists moby/buildkit and tonistiigi/binfmt since the multi-arch build is pushed to registry instead of loaded locally, so we need to pull it first (cached anyway)
echo '```' >> "$GITHUB_STEP_SUMMARY" cmd docker pull "$IMG"
emd '# Uncompressed size (max, not size on disk due to sharing):'
cmd docker image ls
emd '# size = unique + shared:'
cmd docker system df -v
emd '```'