build: build_plugin.sh wiederhergestellt (venv, optionaler Versionsbump, ZIP)

This commit is contained in:
Markus F.J. Busche
2025-09-21 12:25:42 +02:00
parent 708c652d21
commit ac3298c40e

142
scripts/build_plugin.sh Executable file
View File

@@ -0,0 +1,142 @@
#!/usr/bin/env bash
set -euo pipefail
# Usage: scripts/build_plugin.sh [VERSION]
# - Läuft im Projekt-.venv
# - Optional: VERSION (z.B. 0.1.6.4). Wenn gesetzt, wird setup.py gepatcht.
# - Baut wheel + sdist und erstellt zusätzlich ein "normales" ZIP der sdist-Struktur.
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")"/.. && pwd)"
PLUGIN_DIR="$ROOT_DIR/octoprint_tailscale_funnel"
DIST_DIR="$PLUGIN_DIR/dist"
VENV_DIR="$ROOT_DIR/.venv"
VERSION_INPUT="${1:-}"
echo "Project root: $ROOT_DIR"
echo "Plugin dir: $PLUGIN_DIR"
echo "Venv dir: $VENV_DIR"
# Ensure venv
if [[ ! -x "$VENV_DIR/bin/python" ]]; then
echo "Creating venv at $VENV_DIR"
python3 -m venv "$VENV_DIR"
fi
"$VENV_DIR/bin/pip" install -q --upgrade pip setuptools wheel build packaging octoprint_setuptools
# Optional: bump version
if [[ -n "$VERSION_INPUT" ]]; then
echo "Setting version to $VERSION_INPUT"
"$VENV_DIR/bin/python" - "$VERSION_INPUT" "$PLUGIN_DIR/setup.py" <<'PY'
import sys, re, pathlib
ver = sys.argv[1]
setup_path = pathlib.Path(sys.argv[2])
text = setup_path.read_text()
new_text = re.sub(r'^(plugin_version\s*=\s*")([^"]*)(")', lambda m: m.group(1) + ver + m.group(3), text, flags=re.M)
setup_path.write_text(new_text)
print("Updated version to", ver)
PY
fi
# Clean dist
mkdir -p "$DIST_DIR"
rm -f "$DIST_DIR"/*
# Build wheel + sdist
echo "Building (wheel + sdist)..."
"$VENV_DIR/bin/python" -m build --no-isolation "$PLUGIN_DIR"
# Create additional plain ZIP from sdist content (flat source zip)
SDIST_TGZ=$(ls -1 "$DIST_DIR"/*.tar.gz | tail -n1 || true)
if [[ -n "$SDIST_TGZ" ]]; then
echo "Creating plain ZIP from sdist: $SDIST_TGZ"
TMP_DIR="$(mktemp -d)"
tar -xzf "$SDIST_TGZ" -C "$TMP_DIR"
SRC_DIR="$(find "$TMP_DIR" -maxdepth 1 -type d -name 'octoprint_tailscale_funnel-*' | head -n1)"
if [[ -n "$SRC_DIR" ]]; then
ZIP_NAME="$(basename "$SRC_DIR").zip"
(cd "$SRC_DIR" && zip -rq "$DIST_DIR/$ZIP_NAME" .)
echo "Created: $DIST_DIR/$ZIP_NAME"
else
echo "WARN: Could not find extracted sdist directory to zip"
fi
rm -rf "$TMP_DIR"
else
echo "WARN: No sdist .tar.gz found, skipping plain ZIP creation"
fi
echo "Artifacts in $DIST_DIR:"
ls -lah "$DIST_DIR"
#!/usr/bin/env bash
set -euo pipefail
# Usage: scripts/build_plugin.sh [VERSION]
# - Läuft im Projekt-.venv
# - Optional: VERSION (z.B. 0.1.6.4). Wenn gesetzt, wird setup.py gepatcht.
# - Baut wheel + sdist und erstellt zusätzlich ein "normales" ZIP der sdist-Struktur.
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")"/.. && pwd)"
PLUGIN_DIR="$ROOT_DIR/octoprint_tailscale_funnel"
DIST_DIR="$PLUGIN_DIR/dist"
VENV_DIR="$ROOT_DIR/.venv"
VERSION_INPUT="${1:-}"
echo "Project root: $ROOT_DIR"
echo "Plugin dir: $PLUGIN_DIR"
echo "Venv dir: $VENV_DIR"
# Ensure venv
if [[ ! -x "$VENV_DIR/bin/python" ]]; then
echo "Creating venv at $VENV_DIR"
python3 -m venv "$VENV_DIR"
fi
"$VENV_DIR/bin/pip" install -q --upgrade pip setuptools wheel build packaging octoprint_setuptools
# Optional: bump version
if [[ -n "$VERSION_INPUT" ]]; then
echo "Setting version to $VERSION_INPUT"
"$VENV_DIR/bin/python" - "$VERSION_INPUT" "$PLUGIN_DIR/setup.py" <<'PY'
import sys, re, pathlib
ver = sys.argv[1]
setup_path = pathlib.Path(sys.argv[2])
text = setup_path.read_text()
new_text = re.sub(r'^(plugin_version\s*=\s*")([^"]*)(")', lambda m: m.group(1) + ver + m.group(3), text, flags=re.M)
setup_path.write_text(new_text)
print("Updated version to", ver)
PY
fi
# Clean dist
mkdir -p "$DIST_DIR"
rm -f "$DIST_DIR"/*
# Build wheel + sdist
echo "Building (wheel + sdist)..."
"$VENV_DIR/bin/python" -m build --no-isolation "$PLUGIN_DIR"
# Create additional plain ZIP from sdist content (flat source zip)
SDIST_TGZ=$(ls -1 "$DIST_DIR"/*.tar.gz | tail -n1 || true)
if [[ -n "$SDIST_TGZ" ]]; then
echo "Creating plain ZIP from sdist: $SDIST_TGZ"
TMP_DIR="$(mktemp -d)"
tar -xzf "$SDIST_TGZ" -C "$TMP_DIR"
SRC_DIR="$(find "$TMP_DIR" -maxdepth 1 -type d -name 'octoprint_tailscale_funnel-*' | head -n1)"
if [[ -n "$SRC_DIR" ]]; then
ZIP_NAME="$(basename "$SRC_DIR").zip"
(cd "$SRC_DIR" && zip -rq "$DIST_DIR/$ZIP_NAME" .)
echo "Created: $DIST_DIR/$ZIP_NAME"
else
echo "WARN: Could not find extracted sdist directory to zip"
fi
rm -rf "$TMP_DIR"
else
echo "WARN: No sdist .tar.gz found, skipping plain ZIP creation"
fi
echo "Artifacts in $DIST_DIR:"
ls -lah "$DIST_DIR"