#!/bin/bash # Copyright 2021 The KubeEdge Authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Reset in case getopts has been used previously in the shell OPTIND=1 usage() { echo "" echo "Usage: $0 -r repository dir_1 ... dir_n" echo -e "\t-r The repository parameters allows to select a private Docker repository to upload the images to." echo -e "\tThe script expects a list of Sedna example to build (joint_inference, federated_learning, etc..). \tMultiple example can be built at the same time by passing a list of directories such as: dir_1 dir_2 ... \tIf no directory is specified, the script will automatically build all available examples." exit 1 # Exit script after printing help } while getopts "r:" opt do case "$opt" in r ) IMAGE_REPO="$OPTARG" ;; ? ) usage ;; # Print usage in case parameter is non-existent esac done shift $((OPTIND-1)) [ "${1:-}" = "--" ] && shift type=$@ if [ -z "$type" ] then echo "No example directory/s specified, building all example images.." type="all" fi if [ -z "$IMAGE_REPO" ] then echo "Using default Docker hub" IMAGE_REPO="kubeedge" fi cd "$(dirname "${BASH_SOURCE[0]}")" IMAGE_TAG=${IMAGE_TAG:-v0.4.0} EXAMPLE_REPO_PREFIX=${IMAGE_REPO}/sedna-example- dockerfiles_multiedgetracking=( multi-edge-tracking-feature-extraction.Dockerfile # multi-edge-tracking-gpu-feature-extraction.Dockerfile # multi-edge-tracking-gpu-videoanalytics.Dockerfile multi-edge-tracking-reid.Dockerfile multi-edge-tracking-videoanalytics.Dockerfile ) dockerfiles_federated_learning=( federated-learning-mistnet-yolo-aggregator.Dockerfile federated-learning-mistnet-yolo-client.Dockerfile federated-learning-surface-defect-detection-aggregation.Dockerfile federated-learning-surface-defect-detection-train.Dockerfile ) dockerfiles_joint_inference=( joint-inference-helmet-detection-big.Dockerfile joint-inference-helmet-detection-little.Dockerfile ) dockerfiles_lifelong_learning=( lifelong-learning-atcii-classifier.Dockerfile ) dockerfiles_incremental_learning=( incremental-learning-helmet-detection.Dockerfile ) # Iterate over the input folders and build them sequentially. for tp in ${type[@]}; do if [[ "$tp" == "all" ]]; then dockerfiles+=( "${dockerfiles_multiedgetracking[@]}" "${dockerfiles_federated_learning[@]}" "${dockerfiles_joint_inference[@]}" "${dockerfiles_lifelong_learning[@]}" "${dockerfiles_incremental_learning[@]}") else dfiles=dockerfiles_$tp[@] dockerfiles+=("${!dfiles}") fi done # Removing duplicate entries (if any) dockerfiles=($(echo "${dockerfiles[@]}" | tr ' ' '\n' | sort -u)) for dockerfile in ${dockerfiles[@]}; do echo "Building $dockerfile" example_name=${dockerfile/.Dockerfile} docker build -f $dockerfile -t ${EXAMPLE_REPO_PREFIX}${example_name}:${IMAGE_TAG} --label sedna=examples .. done