The compose services bind-mount the repo and build as root, so every artifact they leave in src-tauri/target belongs to root on the host. It accumulates: 11,124 such files had built up, enough that cargo clean and scripts/clean.sh failed with EACCES — and a plain cargo build died part-way through, because build scripts compile for the host and land in target/debug even when cross-compiling to Android. That is what blocked the device build in this batch. Restores ownership at the end of each containerised build, reading the intended owner from the checkout so no uid has to be plumbed through from the host. A no-op when not running as root, so the native build scripts call it unconditionally. Running the containers as the host uid is the tidier fix and stays open — it needs the cargo/bun cache volumes moved off /root first, which is why this is not a one-line user: directive. TRACES: | DR-213
49 lines
1.7 KiB
Bash
Executable File
49 lines
1.7 KiB
Bash
Executable File
#!/bin/bash
|
|
# Build Linux desktop packages (deb + rpm) for JellyTau.
|
|
#
|
|
# Produces bundles under src-tauri/target/release/bundle/{deb,rpm}.
|
|
# Runs on the existing Ubuntu builder image. NOTE: Tauri has no pacman bundle
|
|
# target — the Arch package is built separately with makepkg (scripts/build-arch.sh
|
|
# / Dockerfile.arch). `appimage` is also available if you want a portable bundle.
|
|
#
|
|
# Usage:
|
|
# scripts/build-desktop-linux.sh # deb + rpm
|
|
# BUNDLES="deb,appimage" scripts/build-desktop-linux.sh # subset / add appimage
|
|
# OUTPUT_DIR=/app/dist scripts/build-desktop-linux.sh # copy bundles out
|
|
set -euo pipefail
|
|
|
|
cd "$(dirname "$0")/.."
|
|
|
|
BUNDLES="${BUNDLES:-deb,rpm}"
|
|
|
|
echo "🐧 Building JellyTau Linux desktop packages"
|
|
echo "==========================================="
|
|
echo "Bundles: $BUNDLES"
|
|
echo ""
|
|
|
|
bun install --frozen-lockfile 2>/dev/null || bun install
|
|
bun run build
|
|
|
|
# --bundles overrides tauri.conf.json bundle.targets so this script controls
|
|
# exactly which Linux formats are produced (never NSIS here).
|
|
bun run tauri build --bundles "$BUNDLES"
|
|
|
|
BUNDLE_ROOT="src-tauri/target/release/bundle"
|
|
echo ""
|
|
echo "✅ Built packages:"
|
|
find "$BUNDLE_ROOT" -maxdepth 2 -type f \
|
|
\( -name '*.deb' -o -name '*.rpm' -o -name '*.AppImage' \) -print
|
|
|
|
if [[ -n "${OUTPUT_DIR:-}" ]]; then
|
|
mkdir -p "$OUTPUT_DIR"
|
|
find "$BUNDLE_ROOT" -maxdepth 2 -type f \
|
|
\( -name '*.deb' -o -name '*.rpm' -o -name '*.AppImage' \) \
|
|
-exec cp -v {} "$OUTPUT_DIR/" \;
|
|
echo ""
|
|
echo "📦 Copied bundles to $OUTPUT_DIR"
|
|
fi
|
|
|
|
# Containerised builds run as root against a bind-mounted tree; hand the
|
|
# artifacts back to the host user. No-op when not root. See DR-213.
|
|
"$(dirname "$0")/restore-ownership.sh"
|