aboutsummaryrefslogtreecommitdiff
path: root/docker/scripts/ciq-env.sh
diff options
context:
space:
mode:
Diffstat (limited to 'docker/scripts/ciq-env.sh')
-rwxr-xr-xdocker/scripts/ciq-env.sh49
1 files changed, 49 insertions, 0 deletions
diff --git a/docker/scripts/ciq-env.sh b/docker/scripts/ciq-env.sh
new file mode 100755
index 0000000..945d59a
--- /dev/null
+++ b/docker/scripts/ciq-env.sh
@@ -0,0 +1,49 @@
+#!/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."
+}