Compilación, pruebas y estado
Estado actual
- Sunfish 3 en diseño: solo hay documentación (
DOC/, AGENTS.md, README.md).
- El código de la 2.0 sigue en el repositorio y no es la base de la 3: se reescribe desde cero (LEGACY-2.0.md).
- Rama actual
master en un remoto privado. El README ya da las instrucciones para GitHub (rama main), para cuando se publique allí.
Publicación prevista
| Proyecto |
Salida |
Propiedades |
Sunfish.Core |
biblioteca |
IsAotCompatible, TreatWarningsAsErrors para avisos de AOT/trimming |
Sunfish.Cli |
sunfish-cli / sunfish-cli.exe |
PublishAot, InvariantGlobalization, StripSymbols |
Sunfish.WinForms |
Sunfish.exe |
OutputType=WinExe, UseWindowsForms, PublishSingleFile, IncludeNativeLibrariesForSelfExtract; autocontenido + EnableCompressionInSingleFile o dependiente del framework (pendiente, ver ARQUITECTURA.md) |
- .NET 10. RID:
win-x64, win-arm64, linux-x64, linux-arm64, osx-x64, osx-arm64.
- Native AOT no compila de forma cruzada entre sistemas: cada
sunfish-cli se compila en su sistema.
Requisitos
- git y el SDK de .NET 10.
- Para
sunfish-cli (AOT):
- Windows: Visual Studio Build Tools con «Desarrollo para escritorio con C++».
- Linux:
clang, ld y las cabeceras de zlib.
- macOS: Xcode Command Line Tools.
- Para
Sunfish.exe: solo el SDK.
Scripts previstos
| Script |
Función |
build.ps1 |
Windows. Detecta el RID, comprueba requisitos (no instala nada; da el comando), usa el repo actual o clona/actualiza, publica Sunfish.exe y sunfish-cli.exe, los deja en la raíz y explica cómo poner sunfish-cli en el PATH. Pendiente: si faltan las herramientas de C++, ¿falla o compila solo la GUI? |
build.sh |
Linux y macOS. Lo mismo para sunfish-cli (sugerencias para apt, dnf, pacman y brew) |
run.cmd |
dotnet run de Sunfish.WinForms, para doble clic |
run-cli.cmd |
dotnet run de Sunfish.Cli, para doble clic |
run.sh |
dotnet run de Sunfish.Cli en Linux y macOS |
- Variable para forks:
SUNFISH_REPO_URL.
- Sin script
publish aparte: build.* ya publica.
.gitignore: /Sunfish.exe, /sunfish-cli, /sunfish-cli.exe, /sunfish.conf, publish/.
Comandos previstos
dotnet build
dotnet test
dotnet run --project src/Sunfish.WinForms
dotnet run --project src/Sunfish.Cli -- [argumentos]
dotnet publish src/Sunfish.Cli -c Release -r <RID>
dotnet publish src/Sunfish.WinForms -c Release -r win-x64
Pruebas automáticas previstas (tests/Sunfish.Tests)
xUnit sobre net10.0, con InternalsVisibleTo desde Sunfish.Core. Las pruebas que tocan variables de entorno van en una colección sin paralelismo. Las de servidor arrancan SunfishHost en localhost con puertos libres y hablan con él por sockets.
| Área |
Qué se prueba |
| HTTP |
HTTP/0.9, 1.0 sin Host, LF solo, cabeceras raras, límites, keep-alive, chunked, Range, 304, HEAD |
| Multipart |
Límites partidos entre búferes, varios ficheros, nombres con ruta de Windows o de Mac, subida cortada (no deja restos) |
| Locations |
Prefijo más largo, comparación por segmentos, ocultación, directorios virtuales, raíz con y sin menú, /$sunfish |
| Rutas |
.., %2e%2e, \, :, nombres reservados, enlaces que salen del share (con ramas por SO) |
| Permisos |
Matriz operación × opción de share × web/FTP/WebDAV; usuarios |
| HTML |
Escapado, entidades Latin-1, enlaces %XX en UTF-8, modo clásico sin <script> |
| CSRF / Auth |
Tokens válidos, caducados y de otra ruta; PBKDF2; caché; bloqueo por intentos |
| FTP |
Comandos, LIST en formato ls -l, MLSD, PASV/EPSV, PORT hacia otra IP rechazado, REST, TYPE A, juegos de caracteres |
| WebDAV |
PROPFIND 0/1, infinity rechazado, MKCOL, MOVE/COPY, LOCK simulado, XML con DTD rechazado |
| Mac |
Ver MAC-CLASICO.md |
| ZIP |
Lo generado se lee con System.IO.Compression; Stored y Deflate; nombres CP437/UTF-8 |
| Config |
Lectura, escritura conservando comentarios, errores con línea, importación de sunfish2 |
| QR |
Matrices frente a vectores de referencia |
Pruebas manuales previstas
- Navegadores modernos: web clásica y moderna, arrastrar y soltar, subida grande por trozos.
- Windows 95/98 con sus navegadores de la época: listado, descargas, subidas por formulario, ZIP;
ftp.exe en modo activo; Carpetas web (WebDAV).
- Mac clásico (System 6/7, Mac OS 8/9) con navegadores y clientes FTP de la época: listado, descargas
.bin/.hqx, subidas MacBinary/BinHex, nombres con acentos.
- WebDAV moderno: Explorador de Windows, Finder de macOS, GVfs.
- GUI: doble clic, arrastrar carpeta a la lista y sobre el
.exe, bandeja, instancia única.
- TUI en Windows Terminal, conhost, Linux, macOS y por SSH.
build.ps1 con | iex; build.sh en Linux y macOS.