torttube/scripts/build-addon-zip.sh
Cobb Hayes 9e4e41e8e3 Public-flip audit: generalize internal hosts/paths + drop Sulkta-internal refs
URLs, mount paths, and LAN host bindings parameterized via env or relative paths
so the repo stands up from a clean clone anywhere. Drop cross-codebase refs
("mirrors clawdforge's pattern"), Sulkta-Coop client/merchant test fixtures,
and audit-changelog scaffolding from comments. README terser, technical content
preserved.
2026-05-27 11:25:46 -07:00

64 lines
2.4 KiB
Bash
Executable file

#!/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"