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