From 07a2c81f0582febfbaa7be42001ff8b531284268 Mon Sep 17 00:00:00 2001 From: Ralf Vogler Date: Sun, 25 May 2025 11:23:32 +0200 Subject: [PATCH] uncompressed docker size with buildx --- .github/workflows/docker.yml | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index a96c7b4..341a4b0 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -95,19 +95,19 @@ jobs: # https://gist.github.com/MichaelSimons/fb588539dcefd9b5fdf45ba04c302db6 - name: Docker (un)compressed sizes run: | - echo '```console' >> "$GITHUB_STEP_SUMMARY" - # echo '# Uncompressed size (max, not size on disk due to sharing):' - # echo '$ docker image ls' >> "$GITHUB_STEP_SUMMARY" - # docker image ls | tee -a "$GITHUB_STEP_SUMMARY" - # echo - # 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" + IMG=ghcr.io/${{ github.actor }}/free-games-claimer:${{env.IMAGE_TAG}} + emd() { echo "$@" | tee -a "$GITHUB_STEP_SUMMARY"; } + cmd() { echo "\$ $@" | tee -a "$GITHUB_STEP_SUMMARY"; "$@" | tee -a "$GITHUB_STEP_SUMMARY"; } + emd '```console' + emd "# Compressed (download) sizes:" 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" - log() { echo "\$ $@" >> "$GITHUB_STEP_SUMMARY"; "$@" >> "$GITHUB_STEP_SUMMARY"; } - log docker buildx history inspect - log docker buildx du - echo '```' >> "$GITHUB_STEP_SUMMARY" + cmd dockersize "$IMG" + cmd docker buildx history inspect + cmd 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) + 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 '```'