Skip to content

Add docker images size change check #5

Add docker images size change check

Add docker images size change check #5

Workflow file for this run

# Copyright (C) 2024 Intel Corporation
# SPDX-License-Identifier: Apache-2.0
name: Check Docker Image Size Change
permissions:
contents: read
on:
pull_request:
branches: [main]
types: [opened, reopened, ready_for_review, synchronize]
paths:
- '**/Dockerfile'
# If there is a new commit, the previous jobs will be canceled
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
check-image-size:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- name: Checkout PR branch
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Get changed Dockerfiles
id: changed-dockerfiles
run: |
git fetch origin ${{ github.base_ref }}
merged_commit=$(git log -1 --format='%H')
files=$(git diff --name-status --diff-filter=ARM ${{ github.event.pull_request.base.sha }} ${merged_commit} | awk '{print $2}' | grep -E 'Dockerfile$' || true)
echo "change_files=$files" >> $GITHUB_OUTPUT
- name: Build and check image sizes
if: steps.changed-dockerfiles.outputs.files != ''
run: |
cd ${{github.workspace}}
set -e
while read -r dockerfile; do
[ -z "$dockerfile" ] && continue
dir=$(dirname "$dockerfile")
image_base="pr-image-size-base:$(echo $dir | tr '/' '-')"
image_pr="pr-image-size-pr:$(echo $dir | tr '/' '-')"
cd $dir
echo "Building base image for $dockerfile"
git switch origin/${{ github.base_ref }}
docker build -f "$dockerfile" -t "$image_base" --no-cache .
size_base=$(docker image inspect "$image_base" | jq '.[0].Size / (1024 * 1024) | round')
echo "Building PR image for $dockerfile"
git checkout ${{ github.event.pull_request.base.sha }}
docker build -f "$dockerfile" -t "$image_pr" --no-cache .
size_pr=$(docker image inspect "$image_pr" | jq '.[0].Size / (1024 * 1024) | round')
diff=$((size_pr - size_base))
echo "::notice file=$dockerfile::Image size change: $size_base -> $size_pr MB}' (diff: $diff MB)"
docker rmi "$image_base" "$image_pr"
done <<< "${{ steps.changed-dockerfiles.outputs.files }}"