From ac3298c40e6a05c0c084a6a39a0ee828b763b5a8 Mon Sep 17 00:00:00 2001 From: "Markus F.J. Busche" Date: Sun, 21 Sep 2025 12:25:42 +0200 Subject: [PATCH] build: build_plugin.sh wiederhergestellt (venv, optionaler Versionsbump, ZIP) --- scripts/build_plugin.sh | 142 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100755 scripts/build_plugin.sh diff --git a/scripts/build_plugin.sh b/scripts/build_plugin.sh new file mode 100755 index 0000000..14acf18 --- /dev/null +++ b/scripts/build_plugin.sh @@ -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" +