1#!/usr/bin/env bash 2# shellcheck disable=SC2046 # we want to arg-split FIRMWARE_FILES 3# shellcheck disable=SC2086 # as above 4# shellcheck disable=SC2116 # as above 5 6set -e 7 8ROOTFS=$1 9FIRMWARE_FILES=$2 10 11if [ -n "${FIRMWARE_FILES:-}" ]; then 12 FIRMWARE=$(jq -s '.' $(echo "$FIRMWARE_FILES")) 13else 14 FIRMWARE="" 15fi 16 17if ! echo "$FIRMWARE" | jq empty; then 18 echo "FIRMWARE contains invalid JSON." 19fi 20 21for item in $(echo "$FIRMWARE" | jq -c '.[]'); do 22 src=$(echo "$item" | jq -r '.src') 23 git_hash=$(echo "$item" | jq -r '.git_hash') 24 dst=$(echo "$item" | jq -r '.dst') 25 26 if [ "$src" = "null" ] || [ "$dst" = "null" ]; then 27 echo "Missing src or dst for $item." 28 continue 29 fi 30 31 # Remove any trailing slashes from src and dst 32 src=${src%/} 33 dst=${dst%/} 34 35 # Remove any leading slash 36 dst=${dst#/} 37 38 if [ "$(echo "$item" | jq '.files | length')" -eq 0 ]; then 39 echo "No files specified for $item." 40 continue 41 fi 42 43 for file in $(echo "$item" | jq -r '.files[]'); do 44 FIRMWARE_SRC_PATH="${src}/${file}" 45 if [ "$git_hash" != "null" ]; then 46 FIRMWARE_SRC_PATH="${FIRMWARE_SRC_PATH}?h=${git_hash}" 47 fi 48 FIRMWARE_DST_DIR="${ROOTFS}/${dst}" 49 50 curl -L --retry 4 -f --retry-all-errors --retry-delay 60 --create-dirs --output-dir "${FIRMWARE_DST_DIR}" -o "${file}" "${FIRMWARE_SRC_PATH}" 51 done 52 53done 54