• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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