#!/usr/bin/env bash # Build addon.zip for torttube. # # Cross-compiles the sidecar via messense/rust-musl-cross:aarch64-musl # (one-shot docker container, no host toolchain mutation), bundles # yt-dlp's universal Python zipapp, packages with the Kodi addon dir # layout, and drops the zip in dist/ at the repo root. # # Usage: bash scripts/build-addon-zip.sh # # Requirements: docker, zip, curl. Runs from any clone of the repo. set -euo pipefail VERSION="${VERSION:-0.0.1}" # Resolve repo root from script location — works from any clone path. REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" SRC="${REPO_ROOT}" CARGO_HOME_CACHE="${REPO_ROOT}/.cargo-aarch64" TARGET_DIR="${REPO_ROOT}/.aarch64-target" STAGE="$(mktemp -d -t torttube-stage.XXXXXX)" DEST_DIR="${DEST_DIR:-${REPO_ROOT}/dist}" trap 'rm -rf "$STAGE"' EXIT mkdir -p "$CARGO_HOME_CACHE" "$TARGET_DIR" "$DEST_DIR" echo ">>> Cross-compile sidecar for aarch64-musl" docker run --rm \ -v "$SRC/sidecar":/src \ -v "$CARGO_HOME_CACHE":/cargo-home \ -v "$TARGET_DIR":/target \ -e PATH=/root/.cargo/bin:/usr/local/musl/bin:/usr/local/bin:/usr/bin:/bin \ -e CARGO_HOME=/cargo-home \ -e CARGO_TARGET_DIR=/target \ -e CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER=aarch64-unknown-linux-musl-gcc \ -e CC_aarch64_unknown_linux_musl=aarch64-unknown-linux-musl-gcc \ -w /src \ messense/rust-musl-cross:aarch64-musl \ cargo build --release echo ">>> Stage addon tree" mkdir -p "$STAGE/plugin.video.torttube/bin" rsync -a "$SRC/addon/plugin.video.torttube/" "$STAGE/plugin.video.torttube/" --exclude bin cp "$TARGET_DIR/aarch64-unknown-linux-musl/release/torttube-sidecar" \ "$STAGE/plugin.video.torttube/bin/" echo ">>> Fetch yt-dlp universal Python zipapp" # Pure-Python zipapp runs on any Python 3.9+ — works around LibreELEC's # armhf userspace (where yt-dlp's dynamic aarch64 binary can't find # ld-linux-aarch64.so.1). Kodi 20 ships Python 3.11. curl -sSL -o "$STAGE/plugin.video.torttube/bin/yt-dlp" \ https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp chmod +x "$STAGE/plugin.video.torttube/bin/"* echo ">>> Build addon.zip" ( cd "$STAGE" && \ rm -f plugin.video.torttube.zip && \ zip -r plugin.video.torttube.zip plugin.video.torttube/ -x '*.DS_Store' > /dev/null ) OUT="$DEST_DIR/plugin.video.torttube-$VERSION.zip" cp "$STAGE/plugin.video.torttube.zip" "$OUT" ls -la "$DEST_DIR/" echo ">>> done — $OUT" echo " Install via Kodi: Settings > Add-ons > Install from zip"