#!/bin/bash # # Copyright (c) 2022 Wind River Systems, Inc. # # SPDX-License-Identifier: Apache-2.0 # set -e source $(dirname "$0")/lib/job_utils.sh require_job_env BUILD_HOME require_job_env DRY_RUN require_job_env USE_DOCKER_CACHE require_job_env BUILD_DOCKER_BASE_IMAGE require_job_env BUILD_STREAM stable require_job_env PUSH_DOCKER_IMAGES declare_job_env DOCKER_IMAGE_LIST declare_job_env DOCKER_BASE_IMAGE load_build_env require_job_env DOCKER_BASE_OS require_job_env DOCKER_OS_LIST wheels_file="std/build-wheels-$DOCKER_BASE_OS-$BUILD_STREAM/stx-$DOCKER_BASE_OS-$BUILD_STREAM-wheels.tar" #require_file "$HOST_WORKSPACE/$wheels_file" declare -a cmd=( "./build-stx-images.sh" "--os-label=$DOCKER_BASE_OS" "--attempts=$DOCKER_BUILD_RETRY_COUNT" "--stream=$BUILD_STREAM" "--no-pull-base" "--version=$TIMESTAMP" "--prefix=$BUILD_BRANCH" "--user=$DOCKER_REGISTRY_ORG" "--latest" ) # Base image provided by build parameter if [[ -n "$DOCKER_BASE_IMAGE" ]] ; then cmd+=("--base=$DOCKER_BASE_IMAGE") elif $BUILD_DOCKER_BASE_IMAGE ; then base_image_tag="$BUILD_BRANCH-$BUILD_STREAM-$TIMESTAMP" docker_base_image="$DOCKER_REGISTRY_ORG/stx-$DOCKER_BASE_OS:$base_image_tag" if [[ -n "$DOCKER_REGISTRY" ]] ; then docker_base_image="$DOCKER_REGISTRY/$docker_base_image" fi cmd+=("--base=$docker_base_image") fi if [[ -n "$DOCKER_REGISTRY" ]] ; then cmd+=("--registry=$DOCKER_REGISTRY") fi if [[ -f "$WORKSPACE_ROOT/$wheels_file" ]] ; then cmd+=("--wheels=\$MY_WORKSPACE/$wheels_file") fi if [[ "$USE_DOCKER_CACHE" == true ]] ; then cmd+=("--cache") fi # add --only if $DOCKER_IMAGE_LIST contains anything if [[ -n "$DOCKER_IMAGE_LIST" ]] ; then comma= only= for img in $(echo "$DOCKER_IMAGE_LIST" | sed 's/[,;]+/ /g') ; do [[ -n "$img" ]] || continue only+="${only}${comma}${img}" comma="," done if [[ -n "$only" ]] ; then cmd+=("--only=$only") fi fi # build-stx-base.sh can only push to one repo. We will push to any # additional repos manually. if $PUSH_DOCKER_IMAGES ; then cmd+=("--push") fi # Usage: retag_and_push $IMAGE_LIST_FILE retag_and_push() { if [[ -n "$EXTRA_REGISTRY_PREFIX_LIST" ]] ; then local list_file="$1" local src_img for src_img in $(grep -E -v '^\s*(#.*)?$' $list_file) ; do local reg_prefix base_img base_img="${src_img#$DOCKER_REGISTRY/$DOCKER_REGISTRY_ORG}" if [[ "$base_img" == "$src_img" ]] ; then die "$list_file: unexpected image \"$src_img\"" fi for reg_prefix in $EXTRA_REGISTRY_PREFIX_LIST ; do local dst_img="$(echo "${reg_prefix}/$base_img" | sed 's!//*!/!g')" stx_docker_cmd $DRY_RUN_ARG "docker tag $src_img $dst_img" stx_docker_cmd $DRY_RUN_ARG "docker push $dst_img" done done fi } # build them lists_dir="$HOST_WORKSPACE/std/build-images" for os in $(echo $DOCKER_OS_LIST | sed 's/,/ /g') ; do list_file="$lists_dir/images-$os-$BUILD_STREAM-versioned.lst" notice "building $BUILD_STREAM $os images" $DRY_RUN || rm -f "$list_file" stx_docker_cmd $DRY_RUN_ARG "cd \$MY_REPO/build-tools/build-docker-images && ${cmd[*]} --os=$os" if $PUSH_DOCKER_IMAGES && [[ -f "$list_file" ]] ; then retag_and_push "$list_file" fi done