Build degli eseguibili da Linux e da Windows: script PowerShell e README
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 <noreply@anthropic.com>
This commit is contained in:
1 parent
c0c140b08d
commit
99f6105556
3 files changed
+46
-14
No files matched your search
@@ -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
|
||||
|
||||
@@ -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 `<rid>` 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 <rid> --self-contained -p:PublishSingleFile=true -o dist/<rid>
|
||||
```
|
||||
Senza `-o` il risultato è in `bin/Release/net10.0/<rid>/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.
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
# Crea gli eseguibili single-file self-contained in dist\<rid>\.
|
||||
# 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) }
|
||||
}
|
||||
Reference in new issue
Block a user