Skip to content

Commit af8ccbf

Browse files
committed
Add docker images size change check
Signed-off-by: ZePan110 <ze.pan@intel.com>
1 parent 11210a9 commit af8ccbf

1 file changed

Lines changed: 61 additions & 0 deletions

File tree

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
# Copyright (C) 2024 Intel Corporation
2+
# SPDX-License-Identifier: Apache-2.0
3+
name: Check Docker Image Size Change
4+
5+
on:
6+
pull_request:
7+
branches: [main]
8+
types: [opened, reopened, ready_for_review, synchronize]
9+
paths:
10+
- '**/Dockerfile'
11+
12+
# If there is a new commit, the previous jobs will be canceled
13+
concurrency:
14+
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
15+
cancel-in-progress: true
16+
17+
jobs:
18+
check-image-size:
19+
runs-on: ubuntu-latest
20+
steps:
21+
- name: Checkout PR branch
22+
uses: actions/checkout@v4
23+
with:
24+
fetch-depth: 0
25+
26+
- name: Set up Docker Buildx
27+
uses: docker/setup-buildx-action@v3
28+
29+
- name: Get changed Dockerfiles
30+
id: changed-dockerfiles
31+
run: |
32+
git fetch origin ${{ github.base_ref }}
33+
merged_commit=$(git log -1 --format='%H')
34+
files=$(git diff --name-status --diff-filter=ARM ${{ github.event.pull_request.base.sha }} ${merged_commit} | awk '{print $2}' | grep -E 'Dockerfile$' || true)
35+
echo "files<<EOF" >> $GITHUB_OUTPUT
36+
echo "$files" >> $GITHUB_OUTPUT
37+
echo "EOF" >> $GITHUB_OUTPUT
38+
39+
- name: Build and check image sizes
40+
if: steps.changed-dockerfiles.outputs.files != ''
41+
run: |
42+
set -e
43+
while read -r dockerfile; do
44+
[ -z "$dockerfile" ] && continue
45+
dir=$(dirname "$dockerfile")
46+
image_base="pr-image-size-base:$(echo $dir | tr '/' '-')"
47+
image_pr="pr-image-size-pr:$(echo $dir | tr '/' '-')"
48+
49+
echo "Building base image for $dockerfile"
50+
git checkout origin/${{ github.base_ref }} -- "$dockerfile"
51+
docker build -f "$dockerfile" -t "$image_base" "$dir"
52+
size_base=$(docker image inspect "$image_base" --format='{{.Size}}')
53+
54+
echo "Building PR image for $dockerfile"
55+
git checkout -- "$dockerfile" # restore PR version
56+
docker build -f "$dockerfile" -t "$image_pr" "$dir"
57+
size_pr=$(docker image inspect "$image_pr" --format='{{.Size}}')
58+
59+
diff=$((size_pr - size_base))
60+
echo "::notice file=$dockerfile::Image size change: $size_base -> $size_pr bytes (diff: $diff bytes)"
61+
done <<< "${{ steps.changed-dockerfiles.outputs.files }}"

0 commit comments

Comments
 (0)