| #!/usr/bin/env bash |
| # shellcheck disable=SC2046 # we want to arg-split FIRMWARE_FILES |
| # shellcheck disable=SC2086 # as above |
| # shellcheck disable=SC2116 # as above |
| |
| set -e |
| |
| ROOTFS=$1 |
| FIRMWARE_FILES=$2 |
| FIRMWARE=$(jq -s '.' $(echo "$FIRMWARE_FILES")) |
| |
| if [ -z "$FIRMWARE" ] || [ "$(echo "$FIRMWARE" | jq '. | length')" -eq 0 ]; then |
| echo "FIRMWARE is not set or is empty." |
| exit |
| fi |
| |
| if ! echo "$FIRMWARE" | jq empty; then |
| echo "FIRMWARE contains invalid JSON." |
| exit |
| fi |
| |
| for item in $(echo "$FIRMWARE" | jq -c '.[]'); do |
| src=$(echo "$item" | jq -r '.src') |
| git_hash=$(echo "$item" | jq -r '.git_hash') |
| dst=$(echo "$item" | jq -r '.dst') |
| |
| if [ "$src" = "null" ] || [ "$dst" = "null" ]; then |
| echo "Missing src or dst for $item." |
| continue |
| fi |
| |
| # Remove any trailing slashes from src and dst |
| src=${src%/} |
| dst=${dst%/} |
| |
| # Remove any leading slash |
| dst=${dst#/} |
| |
| if [ "$(echo "$item" | jq '.files | length')" -eq 0 ]; then |
| echo "No files specified for $item." |
| continue |
| fi |
| |
| for file in $(echo "$item" | jq -r '.files[]'); do |
| FIRMWARE_SRC_PATH="${src}/${file}" |
| if [ "$git_hash" != "null" ]; then |
| FIRMWARE_SRC_PATH="${FIRMWARE_SRC_PATH}?h=${git_hash}" |
| fi |
| FIRMWARE_DST_DIR="${ROOTFS}/${dst}" |
| |
| curl -L --retry 4 -f --retry-all-errors --retry-delay 60 --create-dirs --output-dir "${FIRMWARE_DST_DIR}" -o "${file}" "${FIRMWARE_SRC_PATH}" |
| done |
| |
| done |