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