Skip to content

Commit

Permalink
check size for the universal image (#979)
Browse files Browse the repository at this point in the history
  • Loading branch information
prathameshzarkar9 authored Mar 11, 2024
1 parent 3934e0f commit 92bed91
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 1 deletion.
6 changes: 5 additions & 1 deletion .github/actions/smoke-test/action.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@ inputs:
description: 'Image to test'
required: true
default: 'base-debian'
threshold:
description: 'Threshold (in GB) to validate that the image size does not excced this limit'
required: false
default: 14

runs:
using: composite
Expand All @@ -24,4 +28,4 @@ runs:
- name: Test image
id: test_image
shell: bash
run: ${{ github.action_path }}/test.sh ${{ inputs.image }}
run: ${{ github.action_path }}/test.sh ${{ inputs.image }} ${{ inputs.threshold }}
58 changes: 58 additions & 0 deletions .github/actions/smoke-test/check-image-size.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
#!/bin/bash
# Function to handle errors
handle_error() {
local exit_code=$?
local line_number=$1
local command=$2
echo "Error occurred at line $line_number with exit code $exit_code in command $command"
exit $exit_code
}
trap 'handle_error $LINENO ${BASH_COMMAND%% *}' ERR
echo "This is line $LINENO"

convert_gb_to_bytes() {
local gb="$1"
local bytes
bytes=$(echo "scale=0; $gb * 1024^3" | bc)
printf "%.0f\n" "$bytes"
}

# Check if bc is installed
install_bc() {
if ! command -v bc &> /dev/null; then
echo "bc is not installed. Installing..."
# Install bc using apt-get (for Debian-based systems)
sudo apt-get update
sudo apt-get install -y bc
fi
}

check_image_size() {
IMAGE="$1"
THRESHOLD_IN_GB="$2"

# call install_bc
install_bc

CONTAINER_ID=$(docker ps -q --filter "label=test-container=$IMAGE")
# Find the image ID of the container
IMAGE_ID=$(docker inspect --format='{{.Image}}' "$CONTAINER_ID")
# Find the size of the image
IMAGE_SIZE=$(docker image inspect --format='{{.Size}}' "$IMAGE_ID")
# Output the size
echo "Size of the image $IMAGE_ID: $IMAGE_SIZE bytes"
threshold=$(convert_gb_to_bytes "$THRESHOLD_IN_GB")
# Retrieve the Docker image size
echo -e "\nThreshold is $threshold bytes ie $THRESHOLD_IN_GB GB"
# Remove the 'MB' from the size string and convert to an integer
image_size=${IMAGE_SIZE%bytes}
image_size=${image_size//.}
# Check if the image size is above the threshold
echo -e "\n🧪 Checking image size of $IMAGE :"
if [ -n $image_size ] && [ $image_size -gt $threshold ]; then
echo -e "\nImage size exceeds the threshold of $THRESHOLD_IN_GB gb"
echo -e "\n❌ Image size check failed."
else
echo -e "\n✅ Passed!"
fi
}
8 changes: 8 additions & 0 deletions .github/actions/smoke-test/test.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
#/bin/bash
IMAGE="$1"
THRESHOLD_IN_GB="$2"

source $(pwd)/.github/actions/smoke-test/check-image-size.sh

export DOCKER_BUILDKIT=1
set -e
Expand All @@ -11,6 +14,11 @@ devcontainer exec --workspace-folder $(pwd)/src/$IMAGE --id-label ${id_label} /

echo "(*) Docker image details..."
docker images
# Checking size of universal image

if [ $IMAGE == "universal" ]; then
check_image_size $IMAGE $THRESHOLD_IN_GB
fi

# Clean up
docker rm -f $(docker container ls -f "label=${id_label}" -q)
1 change: 1 addition & 0 deletions .github/workflows/smoke-universal.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -26,3 +26,4 @@ jobs:
uses: ./.github/actions/smoke-test
with:
image: universal
threshold: 14

0 comments on commit 92bed91

Please sign in to comment.