github.com/verrazzano/verrazzano@v1.7.1/ci/scripts/check_image_sizes.sh (about) 1 #!/usr/bin/env bash 2 # 3 # Copyright (c) 2023, Oracle and/or its affiliates. 4 # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. 5 # 6 7 # Function to process the data from a file 8 process_file() { 9 local IMAGE_FILE="$1" 10 local IMAGENAME_ARRAY=() 11 local IMAGESIZE_ARRAY=() 12 13 while IFS= read -r line; do 14 # Extract image name 15 IMAGENAME=$(echo "$line" | cut -d ':' -f 1) 16 # Extract image size 17 IMAGESIZE=$(echo "$line" | cut -d ',' -f 2 | cut -d ',' -f 2) 18 # Convert IMAGESIZE to an integer & remove spaces 19 IMAGESIZE_INT=$(echo "$IMAGESIZE" | tr -d ' ') 20 # Store the image name and size in separate arrays 21 IMAGENAME_ARRAY+=("$IMAGENAME") 22 IMAGESIZE_ARRAY+=("$IMAGESIZE_INT") 23 done < "$IMAGE_FILE" 24 25 for ((i = 0; i < ${#IMAGENAME_ARRAY[@]}; i++)); do 26 echo "${IMAGENAME_ARRAY[$i]}:${IMAGESIZE_ARRAY[$i]}" 27 done 28 } 29 30 # Extract Commit ID 31 extract_commit_id(){ 32 local FILENAME="$1" 33 LAST_LINE=$(tail -n 1 "$FILENAME") 34 COMMIT_ID=$(echo "$LAST_LINE" | cut -d '-' -f 2) 35 echo "$COMMIT_ID">${WORKSPACE}/commitID.txt 36 } 37 38 oci --region us-phoenix-1 os object get --namespace ${OCI_OS_NAMESPACE} -bn ${OCI_OS_BUCKET} --name ${CLEAN_BRANCH_NAME}/image-list --file ${WORKSPACE}/image-sizes-objectstore.txt 39 if [ $? -ne 0 ] ; then 40 cp ${WORKSPACE}/image-sizes.txt ${WORKSPACE}/image-sizes-objectstore.txt 41 echo "${CLEAN_BRANCH_NAME}/image-list not found" 42 oci --region us-phoenix-1 os object put --force --namespace ${OCI_OS_NAMESPACE} -bn ${OCI_OS_BUCKET} --name ${CLEAN_BRANCH_NAME}/image-list --file ${WORKSPACE}/image-sizes.txt 43 echo "${GIT_COMMIT}">${WORKSPACE}/commitID.txt 44 if [ $? -eq 0 ] ; then 45 exit 46 fi 47 echo "os object put --file image-sizes.txt failed" 48 exit 49 fi 50 51 declare -A IMAGENAME_SIZES_FILE_OS 52 declare -A IMAGENAME_SIZES_FILE_GENERATED 53 54 extract_commit_id "${WORKSPACE}/image-sizes-objectstore.txt" 55 IMAGE_DATA_OS=$(process_file "${WORKSPACE}/image-sizes-objectstore.txt") 56 IMAGE_DATA_GENERATED=$(process_file "${WORKSPACE}/image-sizes.txt") 57 58 IMAGE_SIZE_DIFF_FOUND="false" 59 NEW_IMAGE_FOUND="false" 60 61 # Exract image size & name. Populate the associative arrays for both files 62 while IFS=: read -r IMAGENAME IMAGESIZE; do 63 IMAGENAME_SIZES_FILE_OS["$IMAGENAME"]=$IMAGESIZE 64 done <<< "$IMAGE_DATA_OS" 65 66 while IFS=: read -r IMAGENAME IMAGESIZE; do 67 IMAGENAME_SIZES_FILE_GENERATED["$IMAGENAME"]=$IMAGESIZE 68 done <<< "$IMAGE_DATA_GENERATED" 69 70 # Check if imagenames in generated file are not in object store 71 for IMAGENAME in "${!IMAGENAME_SIZES_FILE_GENERATED[@]}"; do 72 if [[ ! "${IMAGENAME_SIZES_FILE_OS[$IMAGENAME]}" ]]; then 73 if [[ "$IMAGENAME" != *"Commit ID-"* ]]; then 74 NEW_IMAGE_FOUND="true" 75 echo "The image-sizes.txt base file contains an image with image name: $IMAGENAME that is not in the newly generated image-sizes.txt." >> ${WORKSPACE}/newimagefound.txt 76 fi 77 fi 78 done 79 80 81 # Compare sizes between the two files 82 for IMAGENAME in "${!IMAGENAME_SIZES_FILE_OS[@]}"; do 83 FILE_SIZE_OS="${IMAGENAME_SIZES_FILE_OS[$IMAGENAME]}" 84 FILE_SIZE_GENERATED="${IMAGENAME_SIZES_FILE_GENERATED[$IMAGENAME]}" 85 86 # Check if image size has increased by the threshold or more 87 if [ -n "$FILE_SIZE_OS" ] && [ -n "$FILE_SIZE_GENERATED" ] && [ "$FILE_SIZE_GENERATED" -gt 0 ] && [ "$FILE_SIZE_GENERATED" -gt "$((FILE_SIZE_OS+IMAGE_SIZE_INCREASE_THRESHOLD))" ]; then 88 IMAGE_SIZE_DIFF_FOUND="true" 89 echo "Image size for $IMAGENAME has increased from $((FILE_SIZE_OS/1000000))MB to $((FILE_SIZE_GENERATED/1000000))MB " >> ${WORKSPACE}/image-increases.txt 90 fi 91 done 92 if [ $IMAGE_SIZE_DIFF_FOUND == "true" ]; then 93 echo "Image size difference found: " 94 cat ${WORKSPACE}/image-increases.txt 95 fi 96 97 if [ $NEW_IMAGE_FOUND == "true" ]; then 98 cat ${WORKSPACE}/newimagefound.txt 99 fi