forked from viewit/KX-Bridge-Release
nightly: 0.9.27-nightly7
This commit is contained in:
@ -85,17 +85,25 @@ jobs:
|
|||||||
git config user.name "gitea-actions"
|
git config user.name "gitea-actions"
|
||||||
git config user.email "actions@it-drui.de"
|
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
|
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
|
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
|
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
|
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 in Temp-Datei (vermeidet YAML-Probleme mit Sonderzeichen wie > oder ```)
|
||||||
BODY_FILE=$(mktemp)
|
BODY_FILE=$(mktemp)
|
||||||
|
|||||||
@ -63,13 +63,13 @@ The PR template will be pre-filled. Set the target branch to **`nightly`**.
|
|||||||
## Branch model
|
## Branch model
|
||||||
|
|
||||||
```
|
```
|
||||||
main ← stable releases only (merged by maintainer)
|
master ← stable releases only (merged by maintainer)
|
||||||
nightly ← integration branch — PRs go here
|
nightly ← integration branch — PRs go here
|
||||||
feature/* ← your feature branch (in your fork)
|
feature/* ← your feature branch (in your fork)
|
||||||
fix/* ← your bugfix 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.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
75
README.es.md
75
README.es.md
@ -14,22 +14,13 @@ ninguna está oficialmente probada ni soportada. Se agradece el feedback.</sub>
|
|||||||
|
|
||||||
<sub>🇬🇧 <a href="README.md">English version</a> · 🇩🇪 <a href="README.de.md">Deutsche Version</a></sub>
|
<sub>🇬🇧 <a href="README.md">English version</a> · 🇩🇪 <a href="README.de.md">Deutsche Version</a></sub>
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
> [!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).
|
|
||||||
|
|
||||||
<div align="center">
|
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
[](https://ko-fi.com/viewitde)
|
[](https://ko-fi.com/viewitde)
|
||||||
|
|
||||||
[](https://gitea.it-drui.de/viewit/KX-Bridge-Release/releases)
|
[](https://gitea.it-drui.de/viewit/KX-Bridge-Release/releases)
|
||||||
|
|
||||||
[](https://gitea.it-drui.de/viewit/KX-Bridge-Release/releases)
|
[](https://gitea.it-drui.de/viewit/KX-Bridge-Release/releases)
|
||||||
|
|
||||||
[](https://www.youtube.com/watch?v=1Ql4wfH27fM)
|
[](https://www.youtube.com/watch?v=1Ql4wfH27fM)
|
||||||
|
|
||||||
@ -37,6 +28,11 @@ ninguna está oficialmente probada ni soportada. Se agradece el feedback.</sub>
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
> [!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
|
## ✨ Características
|
||||||
@ -53,7 +49,7 @@ ninguna está oficialmente probada ni soportada. Se agradece el feedback.</sub>
|
|||||||
| 🧩 | **Multi-impresora** — múltiples impresoras en **una** instancia del puente, cambia mediante un menú desplegable |
|
| 🧩 | **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 |
|
| ➕ | **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 |
|
| 🔁 | **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 |
|
| 🔄 | **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 |
|
| 🧠 | **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):**
|
**Binario Linux (sin Docker):**
|
||||||
```bash
|
```bash
|
||||||
chmod +x kx-bridge-linux-amd64 && ./kx-bridge-linux-amd64
|
chmod +x kx-bridge && ./kx-bridge
|
||||||
```
|
```
|
||||||
|
|
||||||
**EXE Windows (sin Docker):**
|
**EXE Windows (sin Docker):**
|
||||||
```
|
```
|
||||||
kx-bridge.exe
|
kx-bridge.exe
|
||||||
```
|
```
|
||||||
|
> `config\` y `data\` se crean junto al EXE — instalación portátil.
|
||||||
|
|
||||||
> ⚠️ **Certificados TLS necesarios para el binario standalone**
|
> 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.
|
||||||
> 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.
|
|
||||||
|
|
||||||
**Python directamente:**
|
**Python directamente:**
|
||||||
```bash
|
```bash
|
||||||
@ -139,6 +109,11 @@ Impresora → Tipo de conexión **Moonraker** → Host: `http://IP-DEL-PUENTE:71
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## 📺 Vídeo tutorial
|
||||||
|
|
||||||
|
[](https://www.youtube.com/watch?v=1Ql4wfH27fM)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## 🎨 Slicer recomendado
|
## 🎨 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
|
## 🩹 Solución de problemas
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|||||||
@ -4488,7 +4488,8 @@ class KobraXBridge:
|
|||||||
for _k in ("PRINTER_IP", "MQTT_PORT", "MQTT_USERNAME", "MQTT_PASSWORD",
|
for _k in ("PRINTER_IP", "MQTT_PORT", "MQTT_USERNAME", "MQTT_PASSWORD",
|
||||||
"MODE_ID", "DEVICE_ID", "DEFAULT_AMS_SLOT", "AUTO_LEVELING",
|
"MODE_ID", "DEVICE_ID", "DEFAULT_AMS_SLOT", "AUTO_LEVELING",
|
||||||
"CAMERA_ON_PRINT", "WEB_UPLOAD_WARNING", "PRINT_START_DIALOG",
|
"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)
|
os.environ.pop(_k, None)
|
||||||
|
|
||||||
in_docker = os.path.exists("/.dockerenv") or os.environ.get("KX_IN_DOCKER")
|
in_docker = os.path.exists("/.dockerenv") or os.environ.get("KX_IN_DOCKER")
|
||||||
|
|||||||
@ -1654,6 +1654,7 @@ function saveSettings(){
|
|||||||
btn.disabled=false;
|
btn.disabled=false;
|
||||||
setText('btn-save-settings',T.settings_save);
|
setText('btn-save-settings',T.settings_save);
|
||||||
closeSettings();
|
closeSettings();
|
||||||
|
_loadSpoolmanStatus();
|
||||||
poll();
|
poll();
|
||||||
},4000);
|
},4000);
|
||||||
}).catch(function(e){
|
}).catch(function(e){
|
||||||
|
|||||||
Reference in New Issue
Block a user