From 3531cad0eff068a47fe138814c040763a3e70b9a Mon Sep 17 00:00:00 2001 From: viewit Date: Fri, 26 Jun 2026 22:51:32 +0200 Subject: [PATCH] nightly: 0.9.27-nightly7 --- .gitea/workflows/nightly.yml | 20 +++++++--- CONTRIBUTING.md | 4 +- README.es.md | 75 ++++++++++++++++-------------------- VERSION | 2 +- kobrax_moonraker_bridge.py | 3 +- web/themes/default/app.js | 1 + 6 files changed, 54 insertions(+), 51 deletions(-) diff --git a/.gitea/workflows/nightly.yml b/.gitea/workflows/nightly.yml index 55aeb1c..863aacb 100644 --- a/.gitea/workflows/nightly.yml +++ b/.gitea/workflows/nightly.yml @@ -85,17 +85,25 @@ jobs: git config user.name "gitea-actions" git config user.email "actions@it-drui.de" - # Letzten nightly-Tag finden (für Changelog-Range) + # Letzten stabilen Release-Tag finden (v* ohne nightly) als Changelog-Basis git fetch --tags origin 2>/dev/null || true - PREV_TAG=$(git tag | grep '^nightly-' | sort | tail -1) + PREV_TAG=$(git tag | grep -E '^v[0-9]+\.' | sort -V | tail -1) + # Fallback: letzter nightly-Tag + [ -z "$PREV_TAG" ] && PREV_TAG=$(git tag | grep '^nightly-' | sort | tail -1) - # Commits seit letztem Tag sammeln + # Commits seit letztem stabilen Tag — chore/ci-Commits herausfiltern if [ -n "$PREV_TAG" ]; then - COMMITS=$(git log "${PREV_TAG}..HEAD" --pretty=format:"- %s" --no-merges 2>/dev/null || true) + COMMITS=$(git log "${PREV_TAG}..HEAD" --pretty=format:"- %s" --no-merges 2>/dev/null \ + | grep -v '^- chore: nightly' \ + | grep -v '^- ci:' \ + || true) else - COMMITS=$(git log --pretty=format:"- %s" --no-merges -20 2>/dev/null || true) + COMMITS=$(git log --pretty=format:"- %s" --no-merges -30 2>/dev/null \ + | grep -v '^- chore: nightly' \ + | grep -v '^- ci:' \ + || true) fi - [ -z "$COMMITS" ] && COMMITS="- Automatischer Nightly-Build" + [ -z "$COMMITS" ] && COMMITS="- Automatischer Nightly-Build (keine neuen Features seit ${PREV_TAG})" # Body in Temp-Datei (vermeidet YAML-Probleme mit Sonderzeichen wie > oder ```) BODY_FILE=$(mktemp) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1b5eb74..f7c3c76 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -63,13 +63,13 @@ The PR template will be pre-filled. Set the target branch to **`nightly`**. ## Branch model ``` -main ← stable releases only (merged by maintainer) +master ← stable releases only (merged by maintainer) nightly ← integration branch — PRs go here feature/* ← your feature branch (in your fork) fix/* ← your bugfix branch (in your fork) ``` -Your PR always targets `nightly`. The maintainer periodically merges `nightly → main` for a new stable release. +Your PR always targets `nightly`. The maintainer periodically merges `nightly → master` for a new stable release. --- diff --git a/README.es.md b/README.es.md index 9cf78f9..ba0d32f 100644 --- a/README.es.md +++ b/README.es.md @@ -14,22 +14,13 @@ ninguna está oficialmente probada ni soportada. Se agradece el feedback. 🇬🇧 English version · 🇩🇪 Deutsche Version - - -> [!CAUTION] -> **Trabajos de mantenimiento en curso esta semana** — Estamos reestructurando el repositorio (modelo de ramas, flujos CI, proceso de contribución). Es posible que notes cambios en los nombres de ramas, plantillas de PR y la forma en que se publican las versiones. Pedimos disculpas por los inconvenientes. El manejo, el flujo de trabajo y la mantenibilidad a largo plazo mejorarán significativamente como resultado. -> -> 👉 ¿Quieres contribuir? Por favor lee primero [CONTRIBUTING.md](CONTRIBUTING.md). - -
-
[![Ko-fi](https://img.shields.io/badge/Ko--fi-Apoya%20este%20proyecto-FF5E5B?style=for-the-badge&logo=ko-fi&logoColor=white)](https://ko-fi.com/viewitde)   [![Releases](https://img.shields.io/badge/Descargar-Lanzamientos-2EA043?style=for-the-badge&logo=gitea&logoColor=white)](https://gitea.it-drui.de/viewit/KX-Bridge-Release/releases)   -[![Downloads](https://img.shields.io/badge/Descargas-800%2B-8957E5?style=for-the-badge&logo=gitea&logoColor=white)](https://gitea.it-drui.de/viewit/KX-Bridge-Release/releases) +[![Downloads](https://img.shields.io/badge/Descargas-3.1k%2B-8957E5?style=for-the-badge&logo=gitea&logoColor=white)](https://gitea.it-drui.de/viewit/KX-Bridge-Release/releases)   [![Video](https://img.shields.io/badge/YouTube-Tutorial-FF0000?style=for-the-badge&logo=youtube&logoColor=white)](https://www.youtube.com/watch?v=1Ql4wfH27fM) @@ -37,6 +28,11 @@ ninguna está oficialmente probada ni soportada. Se agradece el feedback.
+> [!CAUTION] +> **Trabajos de mantenimiento en curso** — Estamos reestructurando el repositorio (modelo de ramas, flujos CI, proceso de contribución). Es posible que notes cambios en los nombres de ramas, plantillas de PR y la forma en que se publican las versiones. Pedimos disculpas por las molestias. El manejo, el flujo de trabajo y la mantenibilidad a largo plazo mejorarán considerablemente. +> +> 👉 ¿Quieres contribuir? Por favor lee [CONTRIBUTING.md](CONTRIBUTING.md) primero. + --- ## ✨ Características @@ -53,7 +49,7 @@ ninguna está oficialmente probada ni soportada. Se agradece el feedback. | 🧩 | **Multi-impresora** — múltiples impresoras en **una** instancia del puente, cambia mediante un menú desplegable | | ➕ | **Añade una impresora con un clic** — solo introduce la IP, las credenciales se importan automáticamente | | 🔁 | **Reconexión MQTT robusta** — el puente sobrevive a reinicios nocturnos de la impresora sin reinicio manual | -| 🌐 | **Interfaz multilingüe** — DE / EN / ES / 中文, detecta automáticamente el idioma del navegador | +| 🌐 | **Interfaz multilingüe** — DE / EN / ES / FR / IT / 中文, detecta automáticamente el idioma del navegador | | 🔄 | **Actualización automática** — instala nuevas versiones directamente desde el navegador | | 🧠 | **OrcaSlicer** — protocolo Moonraker completo (HTTP + WebSocket); usa el [build OrcaSlicer-KX](#-slicer-recomendado) para emparejamiento correcto de vendor por ranura | @@ -75,43 +71,17 @@ docker compose up -d **Binario Linux (sin Docker):** ```bash -chmod +x kx-bridge-linux-amd64 && ./kx-bridge-linux-amd64 +chmod +x kx-bridge && ./kx-bridge ``` **EXE Windows (sin Docker):** ``` kx-bridge.exe ``` +> `config\` y `data\` se crean junto al EXE — instalación portátil. -> ⚠️ **Certificados TLS necesarios para el binario standalone** -> -> El bridge habla con el MQTT de la impresora vía mTLS y necesita dos -> ficheros de certificado **junto al binario**: -> -> - `anycubic_slicer.crt` -> - `anycubic_slicer.key` -> -> Ambos vienen en **`anycubic-certs.zip`** en la misma página de release. -> Descárgalo y extrae los dos ficheros en el mismo directorio que -> `kx-bridge-linux-amd64` o `kx-bridge.exe`. Sin ellos verás -> `Verbindung fehlgeschlagen: TLS-Zertifikate fehlen …` (0.9.19.1+) o -> `[Errno 2] No such file or directory` (versiones anteriores). -> -> Estructura correcta: -> ``` -> ~/kx-bridge/ -> ├── kx-bridge-linux-amd64 (o kx-bridge.exe) -> ├── anycubic_slicer.crt ← de anycubic-certs.zip -> ├── anycubic_slicer.key ← de anycubic-certs.zip -> └── config/ (se crea en el primer arranque) -> ``` -> -> Los usuarios de Docker no necesitan hacer esto — los certificados -> están incluidos en la imagen. - -> Con los binarios de Linux y Windows, `config/` y `data/` (configuración, -> SQLite, almacén de GCode) viven junto al programa. Copia toda la carpeta -> para mover la instalación. +> Con los binarios de Linux y Windows, `config/` y `data/` (configuración, SQLite, almacén de GCode) +> viven junto al programa. Copia toda la carpeta para mover la instalación. **Python directamente:** ```bash @@ -139,6 +109,11 @@ Impresora → Tipo de conexión **Moonraker** → Host: `http://IP-DEL-PUENTE:71 --- +## 📺 Vídeo tutorial + +[![Configuración y uso de KX-Bridge](https://img.youtube.com/vi/1Ql4wfH27fM/hqdefault.jpg)](https://www.youtube.com/watch?v=1Ql4wfH27fM) + +--- ## 🎨 Slicer recomendado @@ -212,6 +187,24 @@ docker compose up -d --build # recompilar localmente (en lugar de desc --- +## 🌙 Builds nocturnos (Nightly) + +Los builds nocturnos contienen las últimas funciones no publicadas y se generan automáticamente en cada push de desarrollo. +Pueden ser inestables — úsalos para pruebas o acceso anticipado a nuevas funciones. + +```bash +docker compose -f docker-compose.yml -f docker-compose.nightly.yml pull +docker compose -f docker-compose.yml -f docker-compose.nightly.yml up -d +``` + +Volver a la versión estable: + +```bash +docker compose pull && docker compose up -d +``` + +--- + ## 🩹 Solución de problemas
diff --git a/VERSION b/VERSION index 35c54f5..0c51b37 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.9.27-nightly6 +0.9.27-nightly7 diff --git a/kobrax_moonraker_bridge.py b/kobrax_moonraker_bridge.py index 42bc9e7..dc23f57 100644 --- a/kobrax_moonraker_bridge.py +++ b/kobrax_moonraker_bridge.py @@ -4488,7 +4488,8 @@ class KobraXBridge: for _k in ("PRINTER_IP", "MQTT_PORT", "MQTT_USERNAME", "MQTT_PASSWORD", "MODE_ID", "DEVICE_ID", "DEFAULT_AMS_SLOT", "AUTO_LEVELING", "CAMERA_ON_PRINT", "WEB_UPLOAD_WARNING", "PRINT_START_DIALOG", - "FILE_READY_DIALOG", "BRIDGE_PRINTER_NAME"): + "FILE_READY_DIALOG", "BRIDGE_PRINTER_NAME", + "SPOOLMAN_SERVER", "SPOOLMAN_SYNC_RATE"): os.environ.pop(_k, None) in_docker = os.path.exists("/.dockerenv") or os.environ.get("KX_IN_DOCKER") diff --git a/web/themes/default/app.js b/web/themes/default/app.js index 082bb37..571784c 100644 --- a/web/themes/default/app.js +++ b/web/themes/default/app.js @@ -1654,6 +1654,7 @@ function saveSettings(){ btn.disabled=false; setText('btn-save-settings',T.settings_save); closeSettings(); + _loadSpoolmanStatus(); poll(); },4000); }).catch(function(e){