Pacchetto Windows: setup.exe offline con Nuitka, licenza e CI di rilascio #76

Closed
opened 2026-10-17 07:03:06 +00:00 by Adriano · 2 comments
Owner

ANALISI (passo 1, Opus 5.5) — piano C, pacchetto Windows di TieMeasureFlow (issue madre; piano A = SQLite, piano B = PDF)
COSA: setup.exe Windows offline di TieMeasureFlow generato dalla CI Gitea ai tag, codice compilato con Nuitka, licenza "tiemeasureflow" legata al PC; stesso schema già in produzione in gitea:Adriano/TieVision-Studio#1 (main ab8e3ae).
PERCHÉ: richiesta di Adriano del 17/10/2026 («anche per TieMeasureFlow bisogna creare pacchetto di installazione»), scelta «setup Windows nativo», niente Internet allo stand A&T Vicenza 27-29/10.
CONTRATTO: un processo TieMeasureFlow.exe con quattro thread (web Flask/waitress 8780, backend 8000, vision 8100, camera 8765), dati in %PROGRAMDATA%\Tielogic\TieMeasureFlow, SQLite via DB_URL, migrazioni come soli .pyc (sourceless), DLL WeasyPrint in \gtk, variabili d'ambiente fisse. Testo integrale nel prompt degli agenti.
FILE E MODIFICHE:

  1. pyproject.toml / uv.lock — gruppo uv "windows": aiosqlite, waitress, vs-license, nuitka, ordered-set, zstandard; [tool.uv.sources] vs-license = vendor/visionsuite/packages/vs-license (editable). Lock senza aggiornare altre versioni.
  2. packaging/windows/avvio.py — licenza (motivo, impronta, file impronta, exit 1), config.env con segreti generati, variabili del contratto, alembic upgrade head sourceless, quattro server in thread, browser su http://127.0.0.1:8780/, seconda istanza apre solo il browser, log su file, --impronta, --host, --senza-finestre, --senza-browser.
  3. packaging/windows/build.ps1 — uv sync --python 3.13 in ambiente separato da quello di sviluppo 3.11, tailwind.css con npx tailwindcss@3.4.19 (come Dockerfile.frontend), pybabel compile, Nuitka --standalone con i namespace visionsuite elencati, metadati distribuzioni, dati di Flask (templates, static, translations), migrazioni come .pyc, prendi-gtk.ps1 del piano B se esiste, gate nessun .py/.pyc fuori da migrations, Inno Setup.
  4. packaging/windows/TieMeasureFlow.iss — Program Files\Tielogic\TieMeasureFlow, ProgramData scrivibile (licenze, TieMeasureFlow\uploads, camera, log), collegamenti menu Start/desktop e «Impronta di questo computer», PrivilegesRequiredOverridesAllowed=commandline.
  5. .gitea/workflows/rilascio-windows.yml — copia adattata di quello di Studio (runs-on windows, submodule vendor/visionsuite con secret SUBMODULI_SSH_KEY già impostato il 17/10, upload-artifact v3, asset sulla release al tag v*).
  6. README.md sezione «Pacchetto Windows» (primo avvio: SETUP_PASSWORD in config.env e pagina di setup per il primo admin; licenza; camera della stazione http://127.0.0.1:8765), CLAUDE.md trappole.
    TEST:
  • packaging/windows/tests/test_avvio.py: licenza mancante/valida (chiave di prova del contratto licenza v1), config.env generato una volta e riletto, variabili impostate, seconda istanza.
  • Build locale su daitarn, setup.exe; installazione /VERYSILENT /CURRENTUSER; exe senza licenza exit 1; con la licenza di prova login Flask 200 su 8780, /api/health 200, vision /health 200, camera /camera/sources 200; nessun .py nel pacchetto e .pyc solo in migrations; disinstallazione pulita.
  • workflow_dispatch sul ramo, run verde sul runner daitarn.
    NON TOCCARE: scripts/camera_service.py, src/frontend/, src/vision/, src/vision_worker/, vendor/, src/backend/** (lo toccano A e B), Dockerfile*, docker-compose*.
ANALISI (passo 1, Opus 5.5) — piano C, pacchetto Windows di TieMeasureFlow (issue madre; piano A = SQLite, piano B = PDF) COSA: setup.exe Windows offline di TieMeasureFlow generato dalla CI Gitea ai tag, codice compilato con Nuitka, licenza "tiemeasureflow" legata al PC; stesso schema già in produzione in gitea:Adriano/TieVision-Studio#1 (main ab8e3ae). PERCHÉ: richiesta di Adriano del 17/10/2026 («anche per TieMeasureFlow bisogna creare pacchetto di installazione»), scelta «setup Windows nativo», niente Internet allo stand A&T Vicenza 27-29/10. CONTRATTO: un processo TieMeasureFlow.exe con quattro thread (web Flask/waitress 8780, backend 8000, vision 8100, camera 8765), dati in %PROGRAMDATA%\Tielogic\TieMeasureFlow, SQLite via DB_URL, migrazioni come soli .pyc (sourceless), DLL WeasyPrint in <programma>\gtk, variabili d'ambiente fisse. Testo integrale nel prompt degli agenti. FILE E MODIFICHE: 1. pyproject.toml / uv.lock — gruppo uv "windows": aiosqlite, waitress, vs-license, nuitka, ordered-set, zstandard; [tool.uv.sources] vs-license = vendor/visionsuite/packages/vs-license (editable). Lock senza aggiornare altre versioni. 2. packaging/windows/avvio.py — licenza (motivo, impronta, file impronta, exit 1), config.env con segreti generati, variabili del contratto, alembic upgrade head sourceless, quattro server in thread, browser su http://127.0.0.1:8780/, seconda istanza apre solo il browser, log su file, --impronta, --host, --senza-finestre, --senza-browser. 3. packaging/windows/build.ps1 — uv sync --python 3.13 in ambiente separato da quello di sviluppo 3.11, tailwind.css con npx tailwindcss@3.4.19 (come Dockerfile.frontend), pybabel compile, Nuitka --standalone con i namespace visionsuite elencati, metadati distribuzioni, dati di Flask (templates, static, translations), migrazioni come .pyc, prendi-gtk.ps1 del piano B se esiste, gate nessun .py/.pyc fuori da migrations\, Inno Setup. 4. packaging/windows/TieMeasureFlow.iss — Program Files\Tielogic\TieMeasureFlow, ProgramData scrivibile (licenze, TieMeasureFlow\uploads, camera, log), collegamenti menu Start/desktop e «Impronta di questo computer», PrivilegesRequiredOverridesAllowed=commandline. 5. .gitea/workflows/rilascio-windows.yml — copia adattata di quello di Studio (runs-on windows, submodule vendor/visionsuite con secret SUBMODULI_SSH_KEY già impostato il 17/10, upload-artifact v3, asset sulla release al tag v*). 6. README.md sezione «Pacchetto Windows» (primo avvio: SETUP_PASSWORD in config.env e pagina di setup per il primo admin; licenza; camera della stazione http://127.0.0.1:8765), CLAUDE.md trappole. TEST: - packaging/windows/tests/test_avvio.py: licenza mancante/valida (chiave di prova del contratto licenza v1), config.env generato una volta e riletto, variabili impostate, seconda istanza. - Build locale su daitarn, setup.exe; installazione /VERYSILENT /CURRENTUSER; exe senza licenza exit 1; con la licenza di prova login Flask 200 su 8780, /api/health 200, vision /health 200, camera /camera/sources 200; nessun .py nel pacchetto e .pyc solo in migrations; disinstallazione pulita. - workflow_dispatch sul ramo, run verde sul runner daitarn. NON TOCCARE: scripts/camera_service.py, src/frontend/**, src/vision/**, src/vision_worker/**, vendor/**, src/backend/** (lo toccano A e B), Dockerfile*, docker-compose*.
Adriano added the sviluppoassegnata:daitarn labels 2026-10-17 07:03:17 +00:00
Author
Owner

🔵 daitarn — preso in carico 2026-10-17T07:03:18Z
ramo: lavoro/daitarn · capacità: build-windows, gpu

🔵 daitarn — **preso in carico** 2026-10-17T07:03:18Z ramo: `lavoro/daitarn` · capacità: build-windows, gpu
Author
Owner

Soluzione

ESITO: fatto
COSA: setup.exe Windows offline di TieMeasureFlow, codice compilato con Nuitka, licenza tiemeasureflow legata al PC, generato dalla CI al tag v*.
FILE: packaging/windows/avvio.py (licenza, config.env, migrazioni sourceless, 4 server in thread 8780/8000/8100/8765), packaging/windows/build.ps1, packaging/windows/TieMeasureFlow.iss, packaging/windows/TieMeasureFlow.ico, packaging/windows/tests/test_avvio.py (15 test), .gitea/workflows/rilascio-windows.yml, pyproject.toml + uv.lock (gruppo windows con tzdata), README.md, CLAUDE.md.
COMMIT: ramo lavoro/daitarn-tmf-pacchetto (ultimo 3aac8cc); integrazione A+B+C su lavoro/daitarn-tmf-windows, V3.0.0 a 0e92959; tag v3.0.0-rc1.
PROVA: run 217 (workflow_dispatch) e run 218 (tag v3.0.0-rc1) success sul runner daitarn, 218 in 34 min. Release https://git.tielogic.xyz/Adriano/TieMeasureFlow/releases/tag/v3.0.0-rc1, asset TieMeasureFlow-setup-3.0.0.exe 161330327 byte sha256 0643e81c437fbb637f3a9b1c9a2e7bb23cbd3e7458f70979f27d02bc388583ce. Setup del rilascio installato /CURRENTUSER su daitarn: 27 DLL in gtk, 0 .py, 0 .pyc fuori da src/backend/migrations (22 dentro), vision-engine-version 2e73691; exe senza licenza -> exit 1 e impronta 726954a9...6e7f scritta; disinstallazione ok. Con licenza (agente piano C, build locale A+B+C): 4 server 200, migrazioni, seed, login, PDF SPC e tabella con Edge.
MANCA: prova sul PC fiera di lunedi' 19/10 (impronta, licenza di produzione, prova a rete staccata, camera GigE reale, tempi del matching senza numba). Aperti a parte: TieMeasureFlow#79 (mock TestTaskComplete), TieMeasureFlow#80 (init-db/reset-db 500).

**Soluzione** ESITO: fatto COSA: setup.exe Windows offline di TieMeasureFlow, codice compilato con Nuitka, licenza tiemeasureflow legata al PC, generato dalla CI al tag v*. FILE: packaging/windows/avvio.py (licenza, config.env, migrazioni sourceless, 4 server in thread 8780/8000/8100/8765), packaging/windows/build.ps1, packaging/windows/TieMeasureFlow.iss, packaging/windows/TieMeasureFlow.ico, packaging/windows/tests/test_avvio.py (15 test), .gitea/workflows/rilascio-windows.yml, pyproject.toml + uv.lock (gruppo windows con tzdata), README.md, CLAUDE.md. COMMIT: ramo lavoro/daitarn-tmf-pacchetto (ultimo 3aac8cc); integrazione A+B+C su lavoro/daitarn-tmf-windows, V3.0.0 a 0e92959; tag v3.0.0-rc1. PROVA: run 217 (workflow_dispatch) e run 218 (tag v3.0.0-rc1) success sul runner daitarn, 218 in 34 min. Release https://git.tielogic.xyz/Adriano/TieMeasureFlow/releases/tag/v3.0.0-rc1, asset TieMeasureFlow-setup-3.0.0.exe 161330327 byte sha256 0643e81c437fbb637f3a9b1c9a2e7bb23cbd3e7458f70979f27d02bc388583ce. Setup del rilascio installato /CURRENTUSER su daitarn: 27 DLL in gtk, 0 .py, 0 .pyc fuori da src/backend/migrations (22 dentro), vision-engine-version 2e73691; exe senza licenza -> exit 1 e impronta 726954a9...6e7f scritta; disinstallazione ok. Con licenza (agente piano C, build locale A+B+C): 4 server 200, migrazioni, seed, login, PDF SPC e tabella con Edge. MANCA: prova sul PC fiera di lunedi' 19/10 (impronta, licenza di produzione, prova a rete staccata, camera GigE reale, tempi del matching senza numba). Aperti a parte: TieMeasureFlow#79 (mock TestTaskComplete), TieMeasureFlow#80 (init-db/reset-db 500).
Adriano removed the assegnata:daitarn label 2026-10-17 11:29:14 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Adriano/TieMeasureFlow#76