Files
repoman/build.sh
T

52 lines
1.6 KiB
Bash
Executable File

#!/usr/bin/env bash
# Compila repoman a un binario standalone con Nuitka y empaqueta un tar.gz de release.
# Requisitos del sistema: python3-dev, gcc, patchelf (ver README).
set -euo pipefail
HERE="$(cd "$(dirname "$0")" && pwd)"
cd "$HERE"
VERSION="$(sed -n 's/^__version__[[:space:]]*=[[:space:]]*"\([^"]*\)".*/\1/p' repoman.py | head -n1)"
if [ -z "$VERSION" ]; then
echo "[build] no se pudo leer __version__ de repoman.py" >&2
exit 1
fi
ARCH="$(uname -m)"
OS="$(uname -s | tr '[:upper:]' '[:lower:]')"
RELEASE_NAME="repoman-v${VERSION}-${OS}-${ARCH}"
if [ ! -d .venv ]; then
echo "[build] creando venv…"
python3 -m venv .venv
.venv/bin/pip install --quiet --upgrade pip
.venv/bin/pip install --quiet -r requirements.txt
fi
if ! .venv/bin/python -c "import nuitka" 2>/dev/null; then
echo "[build] instalando nuitka en el venv…"
.venv/bin/pip install --quiet nuitka
fi
echo "[build] versión: v${VERSION}"
echo "[build] limpiando artefactos previos…"
rm -rf dist build repoman.build repoman.dist repoman.onefile-build
echo "[build] compilando (esto puede tardar 1-2 min)…"
.venv/bin/python -m nuitka \
--onefile \
--assume-yes-for-downloads \
--output-dir=dist \
--output-filename=repoman \
--remove-output \
--lto=yes \
--include-package=rich \
--include-package=readchar \
repoman.py
echo "[build] empaquetando release ${RELEASE_NAME}.tar.gz…"
tar -czf "dist/${RELEASE_NAME}.tar.gz" -C dist repoman
echo "[build] hecho:"
ls -lh "dist/repoman" "dist/${RELEASE_NAME}.tar.gz"
echo "[build] instalar con: cp dist/repoman ~/.local/bin/"