Files
homarr/ops/assemble-standalone.sh
T
zacharyandClaude Opus 5.5 95df5af7cf chore(ops): build with bun and ship v2's .output/standalone
v2 replaces pnpm with bun and moves the standalone build to
apps/nextjs/.output/standalone, which already carries static assets,
public and next.config.ts. Next still writes an incomplete
.next/standalone, so the assembler now refuses to run without the v2
output rather than silently shipping that one.

The notes now list v2's registration points, the tests that already
fail on the upstream tag, and the one-way v1 to v2 database migration.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 00:49:44 +02:00

67 lines
2.7 KiB
Bash
Executable File

#!/usr/bin/env bash
#
# Assemble l'arborescence d'exécution à partir d'un dépôt déjà construit.
#
# Le dépôt et l'instance qui tourne n'ont PAS la même forme : le clone contient
# des sources et un `apps/nextjs/.output/standalone` ; l'instance attend
# `apps/nextjs/server.js`, `db/migrations/`, `build/better_sqlite3.node` à sa
# racine. Ce script fait la conversion — les mêmes COPY que le stage `runner`
# du Dockerfile officiel, d'où vient la disposition de /opt/homarr.
#
# Usage : ops/assemble-standalone.sh <destination>
#
# Construire d'abord :
# bun run turbo run build --filter=@homarr/nextjs... --filter=@homarr/cli
#
set -euo pipefail
DEST="${1:?usage: ops/assemble-standalone.sh <destination>}"
REPO="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$REPO"
# Depuis la v2, la sortie est .output/standalone. Next écrit encore un
# .next/standalone intermédiaire, incomplet : ne jamais le prendre à la place.
[ -f apps/nextjs/.output/standalone/apps/nextjs/server.js ] || {
echo "apps/nextjs/.output/standalone absent — construis d'abord :" >&2
echo " bun run turbo run build --filter=@homarr/nextjs... --filter=@homarr/cli" >&2
exit 1
}
mkdir -p "$DEST"
# L'ordre suit le Dockerfile : le standalone d'abord, le reste par-dessus. En v2,
# le standalone embarque déjà .next/static, public, next.config.ts et
# package.json — le Dockerfile ne les copie plus à part.
cp -a apps/nextjs/.output/standalone/. "$DEST/"
mkdir -p "$DEST/apps/cli"
cp -a packages/cli/cli.cjs "$DEST/apps/cli/cli.cjs"
# Binaire natif : lié à l'architecture et à l'ABI Node de la machine qui a
# construit. Assembler et exécuter sur la même machine rend la question sans
# objet ; c'est le déploiement à distance qui doit la poser.
mkdir -p "$DEST/build"
cp -a node_modules/better-sqlite3/build/Release/better_sqlite3.node "$DEST/build/"
mkdir -p "$DEST/db"
rm -rf "$DEST/db/migrations"
cp -a packages/db/migrations "$DEST/db/migrations"
# run.sh n'est copié que s'il manque, jamais écrasé. Sur le LXC, l'installateur
# a adapté le sien — il annonce le port 80 là où celui du dépôt annonce 7575 —
# et l'écraser ferait écouter nginx sur deux ports différents selon la famille
# d'adresses. Même raison pour entrypoint.sh, nginx.conf et redis.conf, qui
# appartiennent à l'installation et ne sont pas copiés du tout.
if [ -f "$DEST/run.sh" ]; then
echo "run.sh déjà présent — laissé tel quel (il peut être adapté à cette installation)."
if ! diff -q scripts/run.sh "$DEST/run.sh" > /dev/null; then
echo " il diffère de scripts/run.sh : \`diff scripts/run.sh $DEST/run.sh\` pour voir quoi."
fi
else
cp -a scripts/run.sh "$DEST/run.sh"
chmod +x "$DEST/run.sh"
fi
echo "Assemblé dans $DEST ($(du -sh "$DEST" | cut -f1))"