github.com/verrazzano/verrazzano@v1.7.1/ci/scripts/generate_vz_distribution.sh (about)

     1  #!/usr/bin/env bash
     2  #
     3  # Copyright (c) 2022, 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  set -e
     8  
     9  # Given a path, if it does not start with a "/", then convert it to an absolute path
    10  ensureAbsolutePath() {
    11    local pathToEnsure="$1"
    12    local startChar=$(echo $1 | cut -c1)
    13    if [ "$startChar" == "/" ]; then
    14      echo $pathToEnsure
    15    else
    16      local origDir="$(pwd)"
    17      local pathDir="$(dirname $pathToEnsure)"
    18      local fileName="$(basename $pathToEnsure)"
    19      cd $pathDir
    20      local fullPath="$(pwd)/${fileName}"
    21      cd $origDir
    22      echo $fullPath
    23    fi
    24  }
    25  
    26  if [ -z "$1" ]; then
    27    echo "Root of Verrazzano repository must be specified"
    28    exit 1
    29  fi
    30  VZ_REPO_ROOT="$(ensureAbsolutePath $1)"
    31  
    32  if [ -z "$2" ]; then
    33    echo "Verrazzano development version must be specified"
    34    exit 1
    35  fi
    36  VZ_DEVELOPENT_VERSION="$2"
    37  
    38  if [ -z "$3" ]; then
    39    echo "Short commit hash must be specified"
    40    exit 1
    41  fi
    42  SHORT_COMMIT_HASH_ENV="$3"
    43  
    44  if [ -z "$BRANCH_NAME" ] || [ -z "$OCI_OS_COMMIT_BUCKET" ] || [ -z "$OCI_OS_NAMESPACE" ] || [ -z "$OCI_OS_REGION" ] || [ -z "$WORKSPACE" ]; then
    45    echo "This script requires environment variables - BRANCH_NAME, OCI_OS_COMMIT_BUCKET, OCI_OS_NAMESPACE, OCI_OS_REGION and WORKSPACE"
    46    exit 1
    47  fi
    48  
    49  if [ -z "$OCI_OS_DIST_REGION" ]; then
    50    echo "OCI_OS_DIST_REGION not specified, defaulted to $OCI_OS_REGION"
    51    OCI_OS_DIST_REGION=$OCI_OS_REGION
    52  fi
    53  
    54  # Create the general distribution layout under a given root directory
    55  createDistributionLayout() {
    56    local rootDir=$1
    57    local devVersion=$2
    58    local distDir=${rootDir}/${devVersion}
    59  
    60    echo "Creating the distribution layout under ${distDir} ..."
    61    mkdir -p ${distDir}
    62    chmod uog+w ${distDir}
    63  
    64    mkdir -p ${distDir}/bin
    65    mkdir -p ${distDir}/manifests/k8s
    66    mkdir -p ${distDir}/manifests/charts
    67    mkdir -p ${distDir}/manifests/profiles
    68  
    69    if [ "${rootDir}" == "${VZ_FULL_ROOT}" ];then
    70       echo "Creating the directory to place images and CLIs for supported platforms for full distribution ..."
    71       # Create a directory to place the images
    72       mkdir -p ${distDir}/images
    73  
    74       # Directory to place the CLI
    75       mkdir -p ${distDir}/bin/darwin-amd64
    76       mkdir -p ${distDir}/bin/darwin-arm64
    77       mkdir -p ${distDir}/bin/linux-amd64
    78       mkdir -p ${distDir}/bin/linux-arm64
    79    fi
    80  }
    81  
    82  # Download the artifacts which are already built and common to both the distributions
    83  downloadCommonFiles() {
    84    echo "Downloading common artifacts under ${VZ_DISTRIBUTION_COMMON} ..."
    85    mkdir -p ${VZ_DISTRIBUTION_COMMON}
    86  
    87    # operator.yaml
    88    oci --region ${OCI_OS_REGION} os object get --namespace ${OCI_OS_NAMESPACE} -bn ${OCI_OS_COMMIT_BUCKET} --name ephemeral/${BRANCH_NAME}/${SHORT_COMMIT_HASH_ENV}/operator.yaml --file ${VZ_DISTRIBUTION_COMMON}/verrazzano-platform-operator.yaml
    89  
    90    # CLI for Linux AMD64
    91    oci --region ${OCI_OS_REGION} os object get --namespace ${OCI_OS_NAMESPACE} -bn ${OCI_OS_COMMIT_BUCKET} --name ephemeral/${BRANCH_NAME}/${SHORT_COMMIT_HASH_ENV}/${VZ_CLI_LINUX_AMD64_TARGZ} --file ${VZ_DISTRIBUTION_COMMON}/${VZ_CLI_LINUX_AMD64_TARGZ}
    92    oci --region ${OCI_OS_REGION} os object get --namespace ${OCI_OS_NAMESPACE} -bn ${OCI_OS_COMMIT_BUCKET} --name ephemeral/${BRANCH_NAME}/${SHORT_COMMIT_HASH_ENV}/${VZ_CLI_LINUX_AMD64_TARGZ_SHA256} --file ${VZ_DISTRIBUTION_COMMON}/${VZ_CLI_LINUX_AMD64_TARGZ_SHA256}
    93  
    94    # CLI for Linux ARM64
    95    oci --region ${OCI_OS_REGION} os object get --namespace ${OCI_OS_NAMESPACE} -bn ${OCI_OS_COMMIT_BUCKET} --name ephemeral/${BRANCH_NAME}/${SHORT_COMMIT_HASH_ENV}/${VZ_CLI_LINUX_ARM64_TARGZ} --file ${VZ_DISTRIBUTION_COMMON}/${VZ_CLI_LINUX_ARM64_TARGZ}
    96    oci --region ${OCI_OS_REGION} os object get --namespace ${OCI_OS_NAMESPACE} -bn ${OCI_OS_COMMIT_BUCKET} --name ephemeral/${BRANCH_NAME}/${SHORT_COMMIT_HASH_ENV}/${VZ_CLI_LINUX_ARM64_TARGZ_SHA256} --file ${VZ_DISTRIBUTION_COMMON}/${VZ_CLI_LINUX_ARM64_TARGZ_SHA256}
    97  
    98    # CLI for Darwin AMD64
    99    oci --region ${OCI_OS_REGION} os object get --namespace ${OCI_OS_NAMESPACE} -bn ${OCI_OS_COMMIT_BUCKET} --name ephemeral/${BRANCH_NAME}/${SHORT_COMMIT_HASH_ENV}/${VZ_CLI_DARWIN_AMD64_TARGZ} --file ${VZ_DISTRIBUTION_COMMON}/${VZ_CLI_DARWIN_AMD64_TARGZ}
   100    oci --region ${OCI_OS_REGION} os object get --namespace ${OCI_OS_NAMESPACE} -bn ${OCI_OS_COMMIT_BUCKET} --name ephemeral/${BRANCH_NAME}/${SHORT_COMMIT_HASH_ENV}/${VZ_CLI_DARWIN_AMD64_TARGZ_SHA256} --file ${VZ_DISTRIBUTION_COMMON}/${VZ_CLI_DARWIN_AMD64_TARGZ_SHA256}
   101  
   102    # CLI for Darwin ARM64
   103    oci --region ${OCI_OS_REGION} os object get --namespace ${OCI_OS_NAMESPACE} -bn ${OCI_OS_COMMIT_BUCKET} --name ephemeral/${BRANCH_NAME}/${SHORT_COMMIT_HASH_ENV}/${VZ_CLI_DARWIN_ARM64_TARGZ} --file ${VZ_DISTRIBUTION_COMMON}/${VZ_CLI_DARWIN_ARM64_TARGZ}
   104    oci --region ${OCI_OS_REGION} os object get --namespace ${OCI_OS_NAMESPACE} -bn ${OCI_OS_COMMIT_BUCKET} --name ephemeral/${BRANCH_NAME}/${SHORT_COMMIT_HASH_ENV}/${VZ_CLI_DARWIN_ARM64_TARGZ_SHA256} --file ${VZ_DISTRIBUTION_COMMON}/${VZ_CLI_DARWIN_ARM64_TARGZ_SHA256}
   105  
   106    # Bill of materials
   107    oci --region ${OCI_OS_REGION} os object get --namespace ${OCI_OS_NAMESPACE} -bn ${OCI_OS_COMMIT_BUCKET} --name ephemeral/${BRANCH_NAME}/${SHORT_COMMIT_HASH_ENV}/generated-verrazzano-bom.json --file ${VZ_DISTRIBUTION_COMMON}/verrazzano-bom.json
   108  
   109    # Validate SHA256 of the downloaded bundle
   110    SHA256_CMD="sha256sum -c"
   111  
   112    if [ "$(uname)" == "Darwin" ]; then
   113        SHA256_CMD="shasum -a 256 -c"
   114    fi
   115    cd ${VZ_DISTRIBUTION_COMMON}
   116    ${SHA256_CMD} ${VZ_CLI_LINUX_AMD64_TARGZ_SHA256}
   117    ${SHA256_CMD} ${VZ_CLI_LINUX_ARM64_TARGZ_SHA256}
   118    ${SHA256_CMD} ${VZ_CLI_DARWIN_AMD64_TARGZ_SHA256}
   119    ${SHA256_CMD} ${VZ_CLI_DARWIN_ARM64_TARGZ_SHA256}
   120  }
   121  
   122  # Copy the common files to directory from where the script builds Verrazzano release distribution
   123  includeCommonFiles() {
   124    local distDir=$1
   125    cp ${VZ_REPO_ROOT}/LICENSE.txt ${distDir}/LICENSE
   126  
   127    # vz-registry-image-helper.sh has a dependency on bom_utils.sh, so copy both the files
   128    cp ${VZ_REPO_ROOT}/tools/scripts/vz-registry-image-helper.sh ${distDir}/bin/vz-registry-image-helper.sh
   129    cp ${VZ_REPO_ROOT}/tools/scripts/bom_utils.sh ${distDir}/bin/bom_utils.sh
   130  
   131    # Copy verrazzano-platform-operator.yaml and charts
   132    cp ${VZ_DISTRIBUTION_COMMON}/verrazzano-platform-operator.yaml ${distDir}/manifests/k8s/verrazzano-platform-operator.yaml
   133    cp -r ${VZ_REPO_ROOT}/platform-operator/helm_config/charts/verrazzano-platform-operator ${distDir}/manifests/charts
   134  
   135    # Copy Bill Of Materials, containing the list of images
   136    cp ${VZ_DISTRIBUTION_COMMON}/verrazzano-bom.json ${distDir}/manifests/verrazzano-bom.json
   137  }
   138  
   139  # Create a text file containing the contents of the bundle
   140  captureBundleContents() {
   141    local rootDir=$1
   142    local generatedDir=$2
   143    local textFile=$3
   144  
   145    cd ${rootDir}
   146    find * -type f > "${generatedDir}/${textFile}"
   147    if [ -f "${generatedDir}/${textFile}" ];
   148    then
   149      sort -u -o "${generatedDir}/${textFile}" "${generatedDir}/${textFile}"
   150    fi
   151    if [ "${OCI_OS_REGION}" != "${OCI_OS_DIST_REGION}" ]; then
   152      oci --region ${OCI_OS_REGION} os object put --force --namespace ${OCI_OS_NAMESPACE} -bn ${OCI_OS_COMMIT_BUCKET} --name ephemeral/${BRANCH_NAME}/${SHORT_COMMIT_HASH_ENV}/${textFile} --file ${generatedDir}/${textFile}
   153    fi
   154    oci --region ${OCI_OS_DIST_REGION} os object put --force --namespace ${OCI_OS_NAMESPACE} -bn ${OCI_OS_COMMIT_BUCKET} --name ephemeral/${BRANCH_NAME}/${SHORT_COMMIT_HASH_ENV}/${textFile} --file ${generatedDir}/${textFile}
   155    rm ${generatedDir}/${textFile}
   156  }
   157  
   158  buildArchLiteBundle() {
   159    local vzCLI=$1
   160    local rootDir=$2
   161    local distDir=$3
   162    local generatedDir=$4
   163    local devVersion=$5
   164    local archLiteBundle=$6
   165    local textFile=$7
   166  
   167    # Extract the CLI for the given architecture
   168    tar xzf ${VZ_DISTRIBUTION_COMMON}/${vzCLI} -C ${distDir}/bin
   169  
   170    # Copy readme
   171    cp ${VZ_REPO_ROOT}/release/docs/README_LITE.md ${distDir}/README.md
   172  
   173    # Build distribution for the given architecture
   174    cd ${rootDir}
   175    tar -czf ${generatedDir}/${archLiteBundle} ${devVersion}
   176  
   177    # Capture the contents of the bundle in a text file
   178    captureBundleContents ${rootDir} ${generatedDir} ${textFile}
   179  
   180    # Clean-up CLI
   181    rm -f ${distDir}/bin/vz
   182  }
   183  
   184  # Create the layout for the Verrazzano source bundle in a source layout directory that is named
   185  # with the right naming convention. These steps are needed so that the generated tar.gz will have the
   186  # right root directory name, and will be stored in a generated dir under the same root dir where the source is present.
   187  createVZSourceLayout() {
   188    local rootDir="$1"
   189    local srcLayoutDir="$2"
   190  
   191    cd $rootDir
   192    echo "Running go mod vendor ${rootDir}..."
   193    go mod vendor
   194  
   195    echo "Creating source layout in ${srcLayoutDir}..."
   196  
   197    local tmp_src_bundle="/tmp/tmp_src_bundle.tar.gz"
   198    echo "Creating $tmp_src_bundle from $rootDir"
   199    tar czf $tmp_src_bundle .
   200  
   201    mkdir -p $srcLayoutDir
   202    cd $srcLayoutDir
   203    echo "Expanding $tmp_src_bundle in $(pwd)"
   204    tar xzf $tmp_src_bundle
   205    rm $tmp_src_bundle
   206    cd $rootDir
   207  }
   208  
   209  # Generate Verrazzano source bundle
   210  generateVZSourceBundle() {
   211    echo "Generating source bundle....."
   212    local rootDir="$1"
   213    local srcLayoutDir="$2"
   214    local srcGeneratedDir="$3"
   215  
   216    cd $rootDir
   217    mkdir -p $srcGeneratedDir
   218  
   219    local bundleRoot=$(basename $srcLayoutDir)
   220    echo "Creating bundle with $bundleRoot as the root dir"
   221    cd $srcLayoutDir/..
   222    tar czf ${srcGeneratedDir}/${VZ_SRC_BUNDLE} $bundleRoot
   223    sha256sum ${srcGeneratedDir}/${VZ_SRC_BUNDLE} > ${srcGeneratedDir}/${VZ_SRC_BUNDLE_SHA256}
   224    cd $srcGeneratedDir
   225    echo "Uploading Verrazzano source bundle to $OCI_OS_DIST_REGION in bucket ${OCI_OS_COMMIT_BUCKET} with name ephemeral/${BRANCH_NAME}/${SHORT_COMMIT_HASH_ENV}/${VZ_SRC_BUNDLE} ..."
   226    if [ "${OCI_OS_REGION}" != "${OCI_OS_DIST_REGION}" ]; then
   227      oci --region ${OCI_OS_REGION} os object put --force --namespace ${OCI_OS_NAMESPACE} -bn ${OCI_OS_COMMIT_BUCKET} --name ephemeral/${BRANCH_NAME}/${SHORT_COMMIT_HASH_ENV}/${VZ_SRC_BUNDLE} --file ${VZ_SRC_BUNDLE}
   228      oci --region ${OCI_OS_REGION} os object put --force --namespace ${OCI_OS_NAMESPACE} -bn ${OCI_OS_COMMIT_BUCKET} --name ephemeral/${BRANCH_NAME}/${SHORT_COMMIT_HASH_ENV}/${VZ_SRC_BUNDLE_SHA256} --file ${VZ_SRC_BUNDLE_SHA256}
   229    fi
   230    oci --region ${OCI_OS_DIST_REGION} os object put --force --namespace ${OCI_OS_NAMESPACE} -bn ${OCI_OS_COMMIT_BUCKET} --name ephemeral/${BRANCH_NAME}/${SHORT_COMMIT_HASH_ENV}/${VZ_SRC_BUNDLE} --file ${VZ_SRC_BUNDLE}
   231    oci --region ${OCI_OS_DIST_REGION} os object put --force --namespace ${OCI_OS_NAMESPACE} -bn ${OCI_OS_COMMIT_BUCKET} --name ephemeral/${BRANCH_NAME}/${SHORT_COMMIT_HASH_ENV}/${VZ_SRC_BUNDLE_SHA256} --file ${VZ_SRC_BUNDLE_SHA256}
   232    echo "Successfully uploaded ${VZ_SRC_BUNDLE}"
   233    cd $rootDir
   234  }
   235  
   236  # Generate Verrazzano lite distribution
   237  generateVZLiteDistribution() {
   238    echo "Generate Verrazzano lite distribution ..."
   239    local rootDir=$1
   240    local devVersion=$2
   241    local generatedDir=$3
   242  
   243    local distDir=${rootDir}/${devVersion}
   244    mkdir -p ${generatedDir}
   245    includeCommonFiles $distDir
   246  
   247    echo "Build distribution for Linux AMD64 architecture ..."
   248    buildArchLiteBundle ${VZ_CLI_LINUX_AMD64_TARGZ} ${rootDir} ${distDir} ${generatedDir} ${devVersion} ${VZ_LINUX_AMD64_TARGZ} ${LITE_LINUX_AMD64_BUNDLE_CONTENTS}
   249  
   250    echo "Build distribution for Linux ARM64 architecture ..."
   251    buildArchLiteBundle ${VZ_CLI_LINUX_ARM64_TARGZ} ${rootDir} ${distDir} ${generatedDir} ${devVersion} ${VZ_LINUX_ARM64_TARGZ} ${LITE_LINUX_ARM64_BUNDLE_CONTENTS}
   252  
   253    echo "Build distribution for Darwin AMD64 architecture ..."
   254    buildArchLiteBundle ${VZ_CLI_DARWIN_AMD64_TARGZ} ${rootDir} ${distDir} ${generatedDir} ${devVersion} ${VZ_DARWIN_AMD64_TARGZ} ${LITE_DARWIN_AMD64_BUNDLE_CONTENTS}
   255  
   256    echo "Build distribution for Darwin ARM64 architecture ..."
   257    buildArchLiteBundle ${VZ_CLI_DARWIN_ARM64_TARGZ} ${rootDir} ${distDir} ${generatedDir} ${devVersion} ${VZ_DARWIN_ARM64_TARGZ} ${LITE_DARWIN_ARM64_BUNDLE_CONTENTS}
   258  
   259    cp ${VZ_DISTRIBUTION_COMMON}/verrazzano-platform-operator.yaml ${generatedDir}/verrazzano-platform-operator.yaml
   260  
   261    cd ${generatedDir}
   262    sha256sum ${VZ_LINUX_AMD64_TARGZ} > ${VZ_LINUX_AMD64_TARGZ_SHA256}
   263    sha256sum ${VZ_LINUX_ARM64_TARGZ} > ${VZ_LINUX_ARM64_TARGZ_SHA256}
   264    sha256sum ${VZ_DARWIN_AMD64_TARGZ} > ${VZ_DARWIN_AMD64_TARGZ_SHA256}
   265    sha256sum ${VZ_DARWIN_ARM64_TARGZ} > ${VZ_DARWIN_ARM64_TARGZ_SHA256}
   266    sha256sum verrazzano-platform-operator.yaml > verrazzano-platform-operator.yaml.sha256
   267  
   268    captureBundleContents ${generatedDir} ${generatedDir} ${LITE_BUNDLE_CONTENTS}
   269  
   270    # Create and upload the final distribution zip file and upload
   271    echo "Build Verrazzano lite distribution ${generatedDir}/${VZ_LITE_RELEASE_BUNDLE} ..."
   272    cd ${generatedDir}
   273    zip ${VZ_LITE_RELEASE_BUNDLE} *
   274    sha256sum ${VZ_LITE_RELEASE_BUNDLE} > ${VZ_LITE_RELEASE_BUNDLE_SHA256}
   275  
   276    echo "Upload Verrazzano lite distribution ${generatedDir}/${VZ_LITE_RELEASE_BUNDLE} ..."
   277  
   278    if [ "${OCI_OS_REGION}" != "${OCI_OS_DIST_REGION}" ]; then
   279      oci --region ${OCI_OS_REGION} os object put --force --namespace ${OCI_OS_NAMESPACE} -bn ${OCI_OS_COMMIT_BUCKET} --name ephemeral/${BRANCH_NAME}/${SHORT_COMMIT_HASH_ENV}/${VZ_LITE_RELEASE_BUNDLE} --file ${VZ_LITE_RELEASE_BUNDLE}
   280      oci --region ${OCI_OS_REGION} os object put --force --namespace ${OCI_OS_NAMESPACE} -bn ${OCI_OS_COMMIT_BUCKET} --name ephemeral/${BRANCH_NAME}/${SHORT_COMMIT_HASH_ENV}/${VZ_LITE_RELEASE_BUNDLE_SHA256} --file ${VZ_LITE_RELEASE_BUNDLE_SHA256}
   281    fi
   282    oci --region ${OCI_OS_DIST_REGION} os object put --force --namespace ${OCI_OS_NAMESPACE} -bn ${OCI_OS_COMMIT_BUCKET} --name ephemeral/${BRANCH_NAME}/${SHORT_COMMIT_HASH_ENV}/${VZ_LITE_RELEASE_BUNDLE} --file ${VZ_LITE_RELEASE_BUNDLE}
   283    oci --region ${OCI_OS_DIST_REGION} os object put --force --namespace ${OCI_OS_NAMESPACE} -bn ${OCI_OS_COMMIT_BUCKET} --name ephemeral/${BRANCH_NAME}/${SHORT_COMMIT_HASH_ENV}/${VZ_LITE_RELEASE_BUNDLE_SHA256} --file ${VZ_LITE_RELEASE_BUNDLE_SHA256}
   284  
   285    echo "Successfully uploaded ${generatedDir}/${VZ_LITE_RELEASE_BUNDLE}"
   286  }
   287  
   288  # Generate Verrazzano full release distribution
   289  generateVZFullDistribution() {
   290    echo "Generate full distribution ..."
   291    local rootDir=$1
   292    local devVersion=$2
   293    local generatedDir=$3
   294  
   295    local distDir=${rootDir}/${devVersion}
   296    mkdir -p ${generatedDir}
   297    includeCommonFiles "${distDir}"
   298  
   299    # Extract the CLIs for supported architectures
   300    tar xzf ${VZ_DISTRIBUTION_COMMON}/${VZ_CLI_LINUX_AMD64_TARGZ} -C ${distDir}/bin/linux-amd64
   301    tar xzf ${VZ_DISTRIBUTION_COMMON}/${VZ_CLI_LINUX_ARM64_TARGZ} -C ${distDir}/bin/linux-arm64
   302  
   303    tar xzf ${VZ_DISTRIBUTION_COMMON}/${VZ_CLI_DARWIN_AMD64_TARGZ} -C ${distDir}/bin/darwin-amd64
   304    tar xzf ${VZ_DISTRIBUTION_COMMON}/${VZ_CLI_DARWIN_ARM64_TARGZ} -C ${distDir}/bin/darwin-arm64
   305  
   306    # Create and upload the final distribution zip file and upload
   307    echo "Create ${generatedDir}/${VZ_FULL_RELEASE_BUNDLE} and upload ..."
   308    cp ${VZ_REPO_ROOT}/release/docs/README_FULL.md ${distDir}/README.md
   309    cp ${VZ_REPO_ROOT}/release/docs/README_FULL.html ${distDir}/README.html
   310  
   311    captureBundleContents ${rootDir} ${generatedDir} ${FULL_BUNDLE_CONTENTS}
   312    cd ${rootDir}
   313    zip -r ${generatedDir}/${VZ_FULL_RELEASE_BUNDLE} *
   314    if [ "${OCI_OS_REGION}" != "${OCI_OS_DIST_REGION}" ]; then
   315      oci --region ${OCI_OS_REGION} os object put --force --namespace ${OCI_OS_NAMESPACE} -bn ${OCI_OS_COMMIT_BUCKET} --name ephemeral/${BRANCH_NAME}/${SHORT_COMMIT_HASH_ENV}/${VZ_FULL_RELEASE_BUNDLE} --file ${generatedDir}/${VZ_FULL_RELEASE_BUNDLE}
   316    fi
   317    oci --region ${OCI_OS_DIST_REGION} os object put --force --namespace ${OCI_OS_NAMESPACE} -bn ${OCI_OS_COMMIT_BUCKET} --name ephemeral/${BRANCH_NAME}/${SHORT_COMMIT_HASH_ENV}/${VZ_FULL_RELEASE_BUNDLE} --file ${generatedDir}/${VZ_FULL_RELEASE_BUNDLE}
   318  
   319    cd ${generatedDir}
   320    sha256sum ${VZ_FULL_RELEASE_BUNDLE} > ${VZ_FULL_RELEASE_BUNDLE_SHA256}
   321    if [ "${OCI_OS_REGION}" != "${OCI_OS_DIST_REGION}" ]; then
   322      oci --region ${OCI_OS_REGION} os object put --force --namespace ${OCI_OS_NAMESPACE} -bn ${OCI_OS_COMMIT_BUCKET} --name ephemeral/${BRANCH_NAME}/${SHORT_COMMIT_HASH_ENV}/${VZ_FULL_RELEASE_BUNDLE_SHA256} --file ${VZ_FULL_RELEASE_BUNDLE_SHA256}
   323    fi
   324    oci --region ${OCI_OS_DIST_REGION} os object put --force --namespace ${OCI_OS_NAMESPACE} -bn ${OCI_OS_COMMIT_BUCKET} --name ephemeral/${BRANCH_NAME}/${SHORT_COMMIT_HASH_ENV}/${VZ_FULL_RELEASE_BUNDLE_SHA256} --file ${VZ_FULL_RELEASE_BUNDLE_SHA256}
   325  
   326    echo "Successfully uploaded ${generatedDir}/${VZ_FULL_RELEASE_BUNDLE}"
   327  }
   328  
   329  # Download the tar files for the images defined in verrazzano-bom.json, and include them in full bundle
   330  includeImageTarFiles() {
   331    local rootDir=$1
   332    local devVersion=$2
   333    local distDir=${rootDir}/${devVersion}/images
   334    ${VZ_REPO_ROOT}/tools/scripts/vz-registry-image-helper.sh -f ${distDir} -b ${VZ_DISTRIBUTION_COMMON}/verrazzano-bom.json
   335  }
   336  
   337  # Call this after the tar files are formed, the images will already have been pulled
   338  listImageSizes() {
   339    ${VZ_REPO_ROOT}/tools/scripts/vz-registry-image-helper.sh -t ghcr.io -b ${VZ_DISTRIBUTION_COMMON}/verrazzano-bom.json -m ${WORKSPACE}/image-list.txt
   340    mapfile -t images < <(cat ${WORKSPACE}/image-list.txt)
   341    local size
   342    local hsize
   343    for image in "${images[@]}"; do
   344      echo "pulling ${image}"
   345      docker pull "${image}"
   346      # Append image size into the image-sizes-unsorted.txt
   347      size=$(docker image inspect "${image}" | jq -r '.[0].Size')
   348      hsize=$(numfmt --to=si ${size})
   349      echo "${image},${size},${hsize}" >> ${WORKSPACE}/image-sizes-unsorted.txt
   350    done
   351  }
   352  
   353  loadExampleTarFiles() {
   354    echo "Generating example image bundle....."
   355    local rootDir="$1"
   356    local generatedDir="$2"
   357  
   358    mkdir "${generatedDir}"
   359  
   360    example_dirs=("${VZ_REPO_ROOT}/examples/hello-helidon" "${VZ_REPO_ROOT}/examples/todo-list")
   361    mapfile -t images < <(grep -r 'image:' "${example_dirs[@]}" | grep -Eo '(ghcr\.io|container\-registry\.oracle\.com)(/.+)+:[^"]+' | uniq)
   362  
   363    local size
   364    local hsize
   365    for image in "${images[@]}"; do
   366      echo "pulling ${image}"
   367      docker pull "${image}"
   368      # Append image size into the image-sizes-unsorted.txt
   369      size=$(docker image inspect "${image}" | jq -r '.[0].Size')
   370      hsize=$(numfmt --to=si ${size})
   371      echo "${image},${size},${hsize}" >> ${WORKSPACE}/image-sizes-unsorted.txt
   372    done
   373  
   374    docker save -o "${generatedDir}/${VZ_EXAMPLE_IMAGES_BUNDLE}" "${images[@]}"
   375    sha256sum "${generatedDir}/${VZ_EXAMPLE_IMAGES_BUNDLE}" > "${generatedDir}/${VZ_EXAMPLE_IMAGES_BUNDLE_SHA256}"
   376    cd "${generatedDir}"
   377    echo "Uploading example images bundle to $OCI_OS_DIST_REGION in bucket ${OCI_OS_COMMIT_BUCKET} with name ephemeral/${BRANCH_NAME}/${SHORT_COMMIT_HASH_ENV}/${VZ_EXAMPLE_IMAGES_BUNDLE} ..."
   378    if [ "${OCI_OS_REGION}" != "${OCI_OS_DIST_REGION}" ]; then
   379      oci --region ${OCI_OS_REGION} os object put --force --namespace ${OCI_OS_NAMESPACE} -bn ${OCI_OS_COMMIT_BUCKET} --name ephemeral/${BRANCH_NAME}/${SHORT_COMMIT_HASH_ENV}/${VZ_EXAMPLE_IMAGES_BUNDLE} --file ${VZ_EXAMPLE_IMAGES_BUNDLE}
   380      oci --region ${OCI_OS_REGION} os object put --force --namespace ${OCI_OS_NAMESPACE} -bn ${OCI_OS_COMMIT_BUCKET} --name ephemeral/${BRANCH_NAME}/${SHORT_COMMIT_HASH_ENV}/${VZ_EXAMPLE_IMAGES_BUNDLE_SHA256} --file ${VZ_EXAMPLE_IMAGES_BUNDLE_SHA256}
   381    fi
   382    oci --region ${OCI_OS_DIST_REGION} os object put --force --namespace ${OCI_OS_NAMESPACE} -bn ${OCI_OS_COMMIT_BUCKET} --name ephemeral/${BRANCH_NAME}/${SHORT_COMMIT_HASH_ENV}/${VZ_EXAMPLE_IMAGES_BUNDLE} --file ${VZ_EXAMPLE_IMAGES_BUNDLE}
   383    oci --region ${OCI_OS_DIST_REGION} os object put --force --namespace ${OCI_OS_NAMESPACE} -bn ${OCI_OS_COMMIT_BUCKET} --name ephemeral/${BRANCH_NAME}/${SHORT_COMMIT_HASH_ENV}/${VZ_EXAMPLE_IMAGES_BUNDLE_SHA256} --file ${VZ_EXAMPLE_IMAGES_BUNDLE_SHA256}
   384    echo "Successfully uploaded ${VZ_EXAMPLE_IMAGES_BUNDLE}"
   385    cd $rootDir
   386  }
   387  
   388  # generate profiles and remove cruft
   389  includeProfiles() {
   390    local rootDir=$1
   391    local devVersion=$2
   392    local distDir=${rootDir}/${devVersion}/manifests/profiles
   393    export VERRAZZANO_ROOT=${VZ_REPO_ROOT}
   394    go run ${VZ_REPO_ROOT}/tools/generate-profiles/generate.go --profile prod --output-dir ${distDir}
   395    go run ${VZ_REPO_ROOT}/tools/generate-profiles/generate.go --profile dev --output-dir ${distDir}
   396    go run ${VZ_REPO_ROOT}/tools/generate-profiles/generate.go --profile managed-cluster --output-dir ${distDir}
   397    go run ${VZ_REPO_ROOT}/tools/generate-profiles/generate.go --profile none --output-dir ${distDir}
   398  }
   399  
   400  # Clean-up workspace after uploading the distribution bundles
   401  cleanupWorkspace() {
   402    rm -rf ${VZ_DISTRIBUTION_COMMON}
   403    rm -rf ${VZ_LITE_ROOT}
   404  }
   405  
   406  # List of files in storage
   407  VZ_CLI_LINUX_AMD64_TARGZ="vz-linux-amd64.tar.gz"
   408  VZ_CLI_LINUX_AMD64_TARGZ_SHA256="vz-linux-amd64.tar.gz.sha256"
   409  
   410  VZ_CLI_LINUX_ARM64_TARGZ="vz-linux-arm64.tar.gz"
   411  VZ_CLI_LINUX_ARM64_TARGZ_SHA256="vz-linux-arm64.tar.gz.sha256"
   412  
   413  VZ_CLI_DARWIN_AMD64_TARGZ="vz-darwin-amd64.tar.gz"
   414  VZ_CLI_DARWIN_AMD64_TARGZ_SHA256="vz-darwin-amd64.tar.gz.sha256"
   415  
   416  VZ_CLI_DARWIN_ARM64_TARGZ="vz-darwin-arm64.tar.gz"
   417  VZ_CLI_DARWIN_ARM64_TARGZ_SHA256="vz-darwin-arm64.tar.gz.sha256"
   418  
   419  DISTRIBUTION_PREFIX="verrazzano-${VZ_DEVELOPENT_VERSION}"
   420  
   421  # Don't use dev version in the source bundle prefix because the private registry job which
   422  # runs air-gapped has no way of getting the dev version until it downloads the source
   423  SRC_BUNDLE_PREFIX="verrazzano-src"
   424  
   425  # Source bundles and SHA256 of the source bundles
   426  VZ_SRC_BUNDLE="${SRC_BUNDLE_PREFIX}.tar.gz"
   427  VZ_SRC_BUNDLE_SHA256="${VZ_SRC_BUNDLE}.sha256"
   428  
   429  # Release bundles and SHA256 of the bundles
   430  VZ_LITE_RELEASE_BUNDLE="${DISTRIBUTION_PREFIX}-lite.zip"
   431  VZ_LITE_RELEASE_BUNDLE_SHA256="${VZ_LITE_RELEASE_BUNDLE}.sha256"
   432  
   433  VZ_FULL_RELEASE_BUNDLE="${DISTRIBUTION_PREFIX}.zip"
   434  VZ_FULL_RELEASE_BUNDLE_SHA256="${VZ_FULL_RELEASE_BUNDLE}.sha256"
   435  
   436  VZ_EXAMPLE_IMAGES_BUNDLE="${DISTRIBUTION_PREFIX}-example-images.tar"
   437  VZ_EXAMPLE_IMAGES_BUNDLE_SHA256="${VZ_EXAMPLE_IMAGES_BUNDLE}.sha256"
   438  
   439  # Linux AMD64 and Darwin AMD64 bundles for the lite distribution
   440  VZ_LINUX_AMD64_TARGZ="${DISTRIBUTION_PREFIX}-linux-amd64.tar.gz"
   441  VZ_LINUX_AMD64_TARGZ_SHA256="${DISTRIBUTION_PREFIX}-linux-amd64.tar.gz.sha256"
   442  
   443  VZ_DARWIN_AMD64_TARGZ="${DISTRIBUTION_PREFIX}-darwin-amd64.tar.gz"
   444  VZ_DARWIN_AMD64_TARGZ_SHA256="${DISTRIBUTION_PREFIX}-darwin-amd64.tar.gz.sha256"
   445  
   446  # Linux ARM64 and Darwin ARM64 bundles for the lite distribution
   447  VZ_LINUX_ARM64_TARGZ="${DISTRIBUTION_PREFIX}-linux-arm64.tar.gz"
   448  VZ_LINUX_ARM64_TARGZ_SHA256="${DISTRIBUTION_PREFIX}-linux-arm64.tar.gz.sha256"
   449  
   450  VZ_DARWIN_ARM64_TARGZ="${DISTRIBUTION_PREFIX}-darwin-arm64.tar.gz"
   451  VZ_DARWIN_ARM64_TARGZ_SHA256="${DISTRIBUTION_PREFIX}-darwin-arm64.tar.gz.sha256"
   452  
   453  # Directory containing the layout and required files for the Verrazzano source bundle
   454  VZ_SRC_ROOT="${WORKSPACE}/verrazzano"
   455  VZ_SRC_GENERATED="${WORKSPACE}/vz-src-generated"
   456  
   457  # Directory to contain the files which are common for both types of distribution bundles
   458  VZ_DISTRIBUTION_COMMON="${WORKSPACE}/vz-distribution-common"
   459  
   460  # Directory to contain the example images tar
   461  VZ_EXAMPLE_IMAGES_GENERATED="${WORKSPACE}/vz-example-images"
   462  
   463  # Directory containing the layout and required files for the Verrazzano lite distribution
   464  VZ_LITE_ROOT="${WORKSPACE}/vz-lite"
   465  VZ_LITE_GENERATED="${WORKSPACE}/vz-lite-generated"
   466  
   467  # Directory containing the layout and required files for the Verrazzano full distribution
   468  VZ_FULL_ROOT="${WORKSPACE}/vz-full"
   469  VZ_FULL_GENERATED="${WORKSPACE}/vz-full-generated"
   470  
   471  LITE_LINUX_AMD64_BUNDLE_CONTENTS="${DISTRIBUTION_PREFIX}-lite-linux-amd64.txt"
   472  LITE_LINUX_ARM64_BUNDLE_CONTENTS="${DISTRIBUTION_PREFIX}-lite-linux-arm64.txt"
   473  LITE_DARWIN_AMD64_BUNDLE_CONTENTS="${DISTRIBUTION_PREFIX}-lite-darwin-amd64.txt"
   474  LITE_DARWIN_ARM64_BUNDLE_CONTENTS="${DISTRIBUTION_PREFIX}-lite-darwin-arm64.txt"
   475  
   476  LITE_BUNDLE_CONTENTS="${DISTRIBUTION_PREFIX}-lite.txt"
   477  FULL_BUNDLE_CONTENTS="${DISTRIBUTION_PREFIX}-full.txt"
   478  
   479  # Build the example image bundle for air gap testing
   480  loadExampleTarFiles "${VZ_REPO_ROOT}" "${VZ_EXAMPLE_IMAGES_GENERATED}"
   481  
   482  # Build Verrazzano source bundle before we start putting generated files in the VZ_REPO_ROOT
   483  createVZSourceLayout "${VZ_REPO_ROOT}" "${VZ_SRC_ROOT}"
   484  generateVZSourceBundle "${VZ_REPO_ROOT}" "${VZ_SRC_ROOT}" "${VZ_SRC_GENERATED}"
   485  
   486  # Call the function to download the artifacts common to both types of distribution bundles
   487  downloadCommonFiles
   488  cd ${WORKSPACE}
   489  
   490  # Build Verrazzano lite distribution bundles
   491  createDistributionLayout "${VZ_LITE_ROOT}" "${DISTRIBUTION_PREFIX}"
   492  includeProfiles "${VZ_LITE_ROOT}" "${DISTRIBUTION_PREFIX}"
   493  generateVZLiteDistribution "${VZ_LITE_ROOT}" "${DISTRIBUTION_PREFIX}" "${VZ_LITE_GENERATED}"
   494  
   495  # Build Verrazzano full distribution bundle
   496  createDistributionLayout "${VZ_FULL_ROOT}" "${DISTRIBUTION_PREFIX}"
   497  includeImageTarFiles "${VZ_FULL_ROOT}" "${DISTRIBUTION_PREFIX}"
   498  includeProfiles "${VZ_FULL_ROOT}" "${DISTRIBUTION_PREFIX}"
   499  generateVZFullDistribution "${VZ_FULL_ROOT}" "${DISTRIBUTION_PREFIX}" "${VZ_FULL_GENERATED}"
   500  
   501  # List the image tar files
   502  listImageSizes
   503  
   504  # Sort the image sizes by size and remove any dups
   505  cat ${WORKSPACE}/image-sizes-unsorted.txt | sort -u -k 2 -t ',' -n > ${WORKSPACE}/image-sizes.txt
   506  echo "Commit ID-${SHORT_COMMIT_HASH_ENV}" >> ${WORKSPACE}/image-sizes.txt
   507  # Delete the directories created under WORKSPACE
   508  cleanupWorkspace