#!/usr/bin/env bash # Shared helpers for the container scripts. Source this file; don't run it. # # Paths, as seen inside the container: # /work the project folder (bind mount) # /home/dev the project's .cache/home folder (bind mount); the Garmin # tools keep the SDK and device files under ~/.Garmin # /work/.cache/keys the developer key (never baked into an image) CIQ_HOME="${HOME}/.Garmin/ConnectIQ" KEY_DIR="/work/.cache/keys" DEV_KEY="${KEY_DIR}/developer_key.der" BUILD_DIR="/work/build" # Print an error and stop. Used for every user-facing failure, so the message # says what to do next instead of leaving a bare stack trace. die() { echo "error: $*" >&2 exit 1 } # Progress line on stderr, so stdout stays clean for machine-readable output. log() { echo "==> $*" >&2 } # Find the SDK selected by `make sdk` and put its bin/ folder on PATH. # Sets CIQ_SDK to the SDK root folder. ciq_require_sdk() { local cfg="${CIQ_HOME}/current-sdk.cfg" [[ -f "${cfg}" ]] || die "Connect IQ SDK not installed. Run 'make sdk' first (you accept Garmin's licence and log in there)." CIQ_SDK="$(tr -d '\r\n' < "${cfg}")" CIQ_SDK="${CIQ_SDK%/}" [[ -x "${CIQ_SDK}/bin/monkeyc" ]] || die "SDK folder '${CIQ_SDK}' has no bin/monkeyc. Run 'make sdk' again." export CIQ_SDK export PATH="${CIQ_SDK}/bin:${PATH}" } # The developer key signs every build, including test builds. ciq_require_key() { [[ -f "${DEV_KEY}" ]] || die "No developer key at .cache/keys/developer_key.der. Run 'make key' first." } # Fail early, with a pointer to `make sdk`, when a device's files are missing. ciq_require_device() { local device="$1" [[ -f "${CIQ_HOME}/Devices/${device}/compiler.json" ]] \ || die "No device files for '${device}'. Is it in manifest.xml? Then run 'make sdk' to download them." }