From 99f6105556451d4b43d7d459e549cd2417043d8a Mon Sep 17 00:00:00 2001 From: Davide Grilli Date: Thu, 15 Oct 2026 12:17:23 +0200 Subject: [PATCH] Build degli eseguibili da Linux e da Windows: script PowerShell e README MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Aggiunge scripts/publish.ps1, equivalente di publish.sh per Windows PowerShell (5.1 e 7), provato su Windows nativo con SDK 10. Il README descrive i tre passi (installare l'SDK, lanciare lo script, trovare i file in dist/) per entrambi i sistemi, il comando dotnet publish senza script e cosa è stato verificato. CLAUDE.md cita i due script e chiede di tenerli allineati. Co-Authored-By: Claude Sonnet 5.5 --- CLAUDE.md | 2 +- README.md | 38 +++++++++++++++++++++++++------------- scripts/publish.ps1 | 20 ++++++++++++++++++++ 3 files changed, 46 insertions(+), 14 deletions(-) create mode 100644 scripts/publish.ps1 diff --git a/CLAUDE.md b/CLAUDE.md index ebeef81..ebb282d 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -16,7 +16,7 @@ agent-wiki-ui (già `LlmRun`; il nome ha un'unica sorgente, vedi [docs/README.md - Build: `dotnet build` (agent-wiki-ui.csproj, `net10.0`, Avalonia) - GUI: `dotnet run`; CLI: `dotnet run -- "prompt"` -- Publish single-file (uno per sistema): `scripts/publish.sh` (crea `dist/win-x64/` e `dist/linux-x64/`, `dist/` è ignorata da git), oppure a mano `dotnet publish -c Release -r win-x64 --self-contained -p:PublishSingleFile=true` e `-r linux-x64` +- Publish single-file (uno per sistema): `scripts/publish.sh` (Linux/WSL/macOS) o `scripts/publish.ps1` (Windows PowerShell): creano `dist/win-x64/` e `dist/linux-x64/` (`dist/` è ignorata da git); i due script vanno tenuti allineati, oppure a mano `dotnet publish -c Release -r win-x64 --self-contained -p:PublishSingleFile=true` e `-r linux-x64` - Test: non esistono ancora (pianificati, Fase 6: `dotnet test`; il piano è in docs/TESTING.md). Per verificare la GUI senza schermo si può usare `Avalonia.Headless` con `CaptureRenderedFrame()` in un progetto di prova fuori dal repo. ## Architettura diff --git a/README.md b/README.md index 9551056..6c4c420 100644 --- a/README.md +++ b/README.md @@ -21,28 +21,40 @@ dotnet run -- --engine codex "spiega questo progetto" ``` ## Creare gli eseguibili (Windows e Linux) -Ogni eseguibile è un **unico file** che include il runtime .NET: chi lo usa non deve installare nulla. Serve solo il .NET SDK 10 sulla macchina che compila, e si può compilare per l'altro sistema (da Linux/WSL si crea anche il `.exe` per Windows). +Ogni eseguibile è un **unico file** che include il runtime .NET: chi lo usa non deve installare nulla. Per crearlo serve solo il .NET SDK 10 sulla macchina che compila, e **da ciascun sistema si creano entrambi gli eseguibili** (da Windows anche quello per Linux, e viceversa). -**Entrambi in un colpo** (Linux, WSL, macOS): -``` -scripts/publish.sh -``` -Risultato: +### 1. Installare il .NET SDK 10 +- **Windows** (PowerShell o Prompt dei comandi): `winget install Microsoft.DotNet.SDK.10`, oppure il programma di installazione da [dotnet.microsoft.com/download](https://dotnet.microsoft.com/download). +- **Linux / WSL / macOS**: pacchetto della distribuzione o script ufficiale da [dotnet.microsoft.com/download](https://dotnet.microsoft.com/download). +- Controllo: `dotnet --version` deve stampare `10.x`. -| Sistema | File | Dimensione | +### 2. Creare gli eseguibili +Dalla cartella del progetto. + +| Sistema | Comando | Scelta del sistema di destinazione | |---|---|---| -| Windows x64 | `dist/win-x64/agent-wiki-ui.exe` | circa 48 MB | -| Linux x64 | `dist/linux-x64/agent-wiki-ui` | circa 48 MB | +| **Linux, WSL, macOS** (bash) | `scripts/publish.sh` | `scripts/publish.sh linux-x64` | +| **Windows** (PowerShell) | `.\scripts\publish.ps1` | `.\scripts\publish.ps1 win-x64` | -Con argomenti si sceglie il sistema: `scripts/publish.sh linux-x64`. Altri identificatori (per esempio `win-arm64`, `linux-arm64`) si possono provare allo stesso modo, ma non sono verificati. +Senza argomenti si creano entrambi. Su Windows, se PowerShell rifiuta di eseguire lo script (criteri di esecuzione): `powershell -ExecutionPolicy Bypass -File .\scripts\publish.ps1`. -**A mano** (anche da PowerShell su Windows, stessi comandi): +Risultato (circa 47 MB per file), in `dist/`, ignorata da git: + +| Sistema | File | +|---|---| +| Windows x64 | `dist/win-x64/agent-wiki-ui.exe` | +| Linux x64 | `dist/linux-x64/agent-wiki-ui` | + +Altri identificatori (per esempio `win-arm64`, `linux-arm64`) si possono provare allo stesso modo, ma non sono verificati. Lo script è solo una comodità: il comando sotto fa la stessa cosa. + +**Senza script** (identico su qualsiasi sistema; sostituisci `` con `win-x64` o `linux-x64`): ``` -dotnet publish -c Release -r win-x64 --self-contained -p:PublishSingleFile=true -o dist/win-x64 -dotnet publish -c Release -r linux-x64 --self-contained -p:PublishSingleFile=true -o dist/linux-x64 +dotnet publish -c Release -r --self-contained -p:PublishSingleFile=true -o dist/ ``` Senza `-o` il risultato è in `bin/Release/net10.0//publish/`. +Verificato: da Linux/WSL entrambi gli eseguibili; da Windows nativo (PowerShell 5.1, SDK 10.0.203) entrambi, e il `.exe` creato parte. + **Usarli** - Windows: doppio clic su `agent-wiki-ui.exe` per la GUI (non si apre nessuna finestra di console), oppure da terminale `agent-wiki-ui.exe "prompt"` per la CLI. Da `cmd` o PowerShell il prompt torna subito e l'output compare dopo; per aspettare la fine e leggere l'exit code usa `start /wait agent-wiki-ui.exe "prompt"` (cmd) o `Start-Process -Wait -NoNewWindow agent-wiki-ui.exe "prompt"` (PowerShell); `& .\agent-wiki-ui.exe "prompt" | Out-Host` aspetta ma non dà l'exit code. Spiegazione in [ADR-0005](docs/adr/0005-windows-senza-console.md). Il file non è firmato: Windows può mostrare un avviso di sicurezza al primo avvio. - Linux: `chmod +x agent-wiki-ui` (se serve) e poi `./agent-wiki-ui`. La GUI richiede un desktop con X11 o XWayland. diff --git a/scripts/publish.ps1 b/scripts/publish.ps1 new file mode 100644 index 0000000..5994b18 --- /dev/null +++ b/scripts/publish.ps1 @@ -0,0 +1,20 @@ +# Crea gli eseguibili single-file self-contained in dist\\. +# Senza argomenti: win-x64 e linux-x64. Con argomenti: i rid indicati (es. .\scripts\publish.ps1 win-x64). +# Funziona su Windows PowerShell 5.1 e PowerShell 7 (la compilazione per un altro sistema non richiede quel sistema). +param([string[]]$Rids = @('win-x64', 'linux-x64')) + +$ErrorActionPreference = 'Stop' +Set-Location (Split-Path -Parent $PSScriptRoot) + +foreach ($rid in $Rids) { + Write-Host "== $rid" + dotnet publish agent-wiki-ui.csproj -c Release -r $rid --self-contained -p:PublishSingleFile=true -o "dist/$rid" --nologo -v quiet + if ($LASTEXITCODE -ne 0) { throw "publish fallito per $rid" } + Get-ChildItem "dist/$rid" -Filter *.pdb -Recurse | Remove-Item # simboli delle librerie native: inutili a chi usa l'app +} + +Write-Host '' +Write-Host 'Eseguibili pronti:' +foreach ($rid in $Rids) { + Get-ChildItem "dist/$rid" -File | ForEach-Object { ' dist/{0}/{1} ({2:N0} MB)' -f $rid, $_.Name, ($_.Length / 1MB) } +}