54 lines
1.6 KiB
Bash
Executable File
54 lines
1.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Compila gitswarm 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' gitswarm.py | head -n1)"
|
|
if [ -z "$VERSION" ]; then
|
|
echo "[build] no se pudo leer __version__ de gitswarm.py" >&2
|
|
exit 1
|
|
fi
|
|
ARCH="$(uname -m)"
|
|
OS="$(uname -s | tr '[:upper:]' '[:lower:]')"
|
|
RELEASE_NAME="gitswarm-v${VERSION}-${OS}-${ARCH}"
|
|
|
|
if [ ! -d .venv ]; then
|
|
echo "[build] creando venv…"
|
|
python3 -m venv .venv
|
|
.venv/bin/pip install --quiet --upgrade pip
|
|
fi
|
|
|
|
echo "[build] sincronizando dependencias…"
|
|
.venv/bin/pip install --quiet -r requirements.txt
|
|
|
|
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 gitswarm.build gitswarm.dist gitswarm.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=gitswarm \
|
|
--remove-output \
|
|
--lto=yes \
|
|
--include-package=rich \
|
|
--include-package=readchar \
|
|
gitswarm.py
|
|
|
|
echo "[build] empaquetando release ${RELEASE_NAME}.tar.gz…"
|
|
tar -czf "dist/${RELEASE_NAME}.tar.gz" -C dist gitswarm
|
|
|
|
echo "[build] hecho:"
|
|
ls -lh "dist/gitswarm" "dist/${RELEASE_NAME}.tar.gz"
|
|
echo "[build] instalar con: cp dist/gitswarm ~/.local/bin/"
|