#!/bin/bash set -euo pipefail # Install the latest jiggablend binary for Linux AMD64 and create wrapper scripts. # Production wrappers do NOT install fixed test secrets. For local test credentials, # use `make init-test` from a development checkout. # Dependencies: curl, jq, tar, sha256sum, sudo (for installation to /usr/local/bin) REPO="s1d3sw1ped/jiggablend" API_URL="https://git.s1d3sw1ped.com/api/v1/repos/${REPO}/releases/latest" ASSET_NAME="jiggablend-linux-amd64.tar.gz" echo "Fetching latest release information..." RELEASE_JSON=$(curl -s "$API_URL") TAG=$(echo "$RELEASE_JSON" | jq -r '.tag_name') echo "Latest version: $TAG" ASSET_URL=$(echo "$RELEASE_JSON" | jq -r ".assets[] | select(.name == \"$ASSET_NAME\") | .browser_download_url") if [ -z "$ASSET_URL" ]; then echo "Error: Asset $ASSET_NAME not found in latest release." exit 1 fi CHECKSUM_URL=$(echo "$RELEASE_JSON" | jq -r '.assets[] | select(.name == "checksums.txt") | .browser_download_url') if [ -z "$CHECKSUM_URL" ]; then echo "Error: checksums.txt not found in latest release." exit 1 fi echo "Downloading $ASSET_NAME..." curl -L -o "$ASSET_NAME" "$ASSET_URL" echo "Downloading checksums.txt..." curl -L -o "checksums.txt" "$CHECKSUM_URL" echo "Verifying checksum..." if ! sha256sum --ignore-missing --quiet -c checksums.txt; then echo "Error: Checksum verification failed." rm -f "$ASSET_NAME" checksums.txt exit 1 fi echo "Extracting..." tar -xzf "$ASSET_NAME" echo "Installing binary to /usr/local/bin (requires sudo)..." sudo install -m 0755 jiggablend /usr/local/bin/ echo "Creating manager wrapper script..." cat << 'EOF' > jiggablend-manager.sh #!/bin/bash set -euo pipefail # Wrapper to run jiggablend manager. # Does NOT set fixed/test API keys or default admin passwords. # Bootstrap (one-time, local admin): # jiggablend manager config enable localauth # jiggablend manager config add user you@example.com 'strong-password' --admin # jiggablend manager config add apikey my-runner --scope manager # For local development only: use `make init-test` from a source checkout. mkdir -p logs rm -f logs/manager.log jiggablend manager -l logs/manager.log EOF chmod +x jiggablend-manager.sh sudo install -m 0755 jiggablend-manager.sh /usr/local/bin/jiggablend-manager rm -f jiggablend-manager.sh echo "Creating runner wrapper script..." cat << 'EOF' > jiggablend-runner.sh #!/bin/bash set -euo pipefail # Wrapper to run jiggablend runner. # Usage: jiggablend-runner [MANAGER_URL] --api-key [RUNNER_FLAGS...] # Or set JIGGABLEND_API_KEY. Default MANAGER_URL: http://localhost:8080 MANAGER_URL="http://localhost:8080" if [[ $# -gt 0 && "$1" != -* ]]; then MANAGER_URL="$1" shift fi EXTRA_ARGS=("$@") API_KEY="${JIGGABLEND_API_KEY:-}" # Allow --api-key in EXTRA_ARGS; if not present and env empty, fail clearly HAS_KEY=0 for arg in "${EXTRA_ARGS[@]+"${EXTRA_ARGS[@]}"}"; do case "$arg" in --api-key|--api-key=*|-k) HAS_KEY=1 ;; esac done if [[ -z "$API_KEY" && "$HAS_KEY" -eq 0 ]]; then echo "Error: provide a runner API key via JIGGABLEND_API_KEY or --api-key." >&2 echo "Create one with: jiggablend manager config add apikey --scope manager" >&2 exit 1 fi mkdir -p logs rm -f logs/runner.log if [[ -n "$API_KEY" && "$HAS_KEY" -eq 0 ]]; then jiggablend runner -l logs/runner.log --api-key="$API_KEY" --manager "$MANAGER_URL" "${EXTRA_ARGS[@]+"${EXTRA_ARGS[@]}"}" else jiggablend runner -l logs/runner.log --manager "$MANAGER_URL" "${EXTRA_ARGS[@]+"${EXTRA_ARGS[@]}"}" fi EOF chmod +x jiggablend-runner.sh sudo install -m 0755 jiggablend-runner.sh /usr/local/bin/jiggablend-runner rm -f jiggablend-runner.sh echo "Cleaning up..." rm -f "$ASSET_NAME" checksums.txt jiggablend echo "Installation complete!" echo "Binary: jiggablend" echo "Wrappers: jiggablend-manager, jiggablend-runner" echo "Run 'jiggablend-manager' to start the manager (no fixed test secrets)." echo "Run 'jiggablend-runner [url] --api-key ' to start a runner." echo "Local dev only: use 'make init-test' from a source checkout for test credentials." echo "Note: Blender, ImageMagick, or FFmpeg may be required. See README."