====== Pipeline di build ====== Descrizione del processo di build per WvdS FPC RAD Studio. ===== Panoramica ===== ┌─────────────────────────────────────────────────────────────┐ │ BUILD PIPELINE │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 1. PRE-BUILD │ │ ├── Controllo policy (wvds-lint) │ │ ├── Risoluzione dipendenze │ │ └── Preparazione asset │ │ │ │ 2. COMPILE │ │ ├── Invocazione pas2js / FPC │ │ ├── Risoluzione unit │ │ └── Generazione codice │ │ │ │ 3. POST-BUILD │ │ ├── Bundling asset │ │ ├── Generazione source map │ │ └── Copia in dist/ │ │ │ │ 4. PACKAGE (opzionale) │ │ ├── Creazione VSIX │ │ └── Stampa versione │ │ │ └─────────────────────────────────────────────────────────────┘ ===== Pre-Build ===== ==== Controllo policy ==== wvds-lint policy --path sources/ Verifica: * P0: Nessun duplicato nelle estensioni * P1: Nessun .ts o .js scritto a mano * P2: Wrapper solo in common/ * P3: Output autocontenuto ==== Risoluzione dipendenze ==== Le dipendenze vengono risolte da ''build.cfg'' e ''package.json'': # build.cfg [build] compiler=pas2js entry=extension_main.pas [dependencies] core=../../common/core vscode=../../common/web/vscode ===== Compile ===== ==== Compilazione pas2js ==== pas2js \ -Jc \ # Output compatto -Jirtl.js \ # RTL come modulo esterno -Jm \ # Genera source map -Tbrowser \ # Target: browser -Fu../../common \ # Percorsi unit -FE./dist \ # Directory output pas/extension_main.pas # Entry point ==== Compilazione FPC ==== fpc \ -Mobjfpc \ # Modalita Object Pascal -Sh \ # Ansi Strings -O3 \ # Ottimizzazione livello 3 -Fu../../common \ # Percorsi unit -FE./bin \ # Directory output project.lpr # File progetto ==== Opzioni compilatore ==== ^ Opzione ^ pas2js ^ FPC ^ Descrizione ^ | Debug | -Jc -Jm | -g -O0 | Simboli debug, nessuna ottimizzazione | | Release | -Jc -O3 | -O3 -Xs | Ottimizzato, nessun simbolo | | Profile | -Jc -Jm | -g -O2 -pg | Instrumentazione profiling | ===== Post-Build ===== ==== Bundling asset ==== Le risorse vengono copiate in ''dist/'': dist/ ├── extension_main.js # Codice compilato ├── extension_main.js.map # Source map └── assets/ # Risorse copiate ├── templates/*.html └── images/*.png ==== Source Map ==== Le source map permettono il debug del codice Pascal: // extension_main.js.map { "version": 3, "sources": ["../pas/extension_main.pas"], "mappings": "..." } ===== Package ===== ==== Creazione VSIX ==== vsce package --out binaries/dist/ Genera: ''wvds-vscode-{name}-{version}.vsix'' ==== Stampa versione ==== La versione viene letta da ''package.json'' e incorporata nel build: const VERSION = {$I version.inc}; // Generato da package.json ===== Modalita build ===== ^ Modalita ^ Utilizzo ^ Ottimizzazione ^ Simboli ^ | debug | Sviluppo | Nessuna | Si | | release | Produzione | Massima | No | | profile | Analisi performance | Media | Si + profiling | ===== Build incrementale ===== Il build usa il caching per compilazione piu veloce: * ''binaries/cache/'' contiene le unit compilate (.ppu, .o) * Solo le unit modificate vengono ricompilate * ''wvds-build clean'' cancella la cache ===== CLI Toolchain ===== La toolchain di build consiste di due strumenti principali: ==== pxamlc (Compilatore PXAML) ==== Compila file PXAML per un target specifico: pxamlc compile \ --target \ --pxaml \ --packs ~/packs \ --out ~/binaries/out// ^ Opzione ^ Descrizione ^ | ''%%--%%target'' | Piattaforma target: tui, desktop, web | | ''%%--%%pxaml'' | File PXAML di input | | ''%%--%%packs'' | Percorso alla registry pack | | ''%%--%%out'' | Directory output | ==== wvds-build ==== Orchestrazione dell'intero processo di build: wvds-build build \ --app ~/sources/applications/ \ --config ~/.wvds/wvds-build.json \ --out ~/binaries/out ^ Opzione ^ Descrizione ^ | ''%%--%%app'' | Directory applicazione | | ''%%--%%config'' | File di configurazione | | ''%%--%%out'' | Directory output | === Altri comandi === # Eliminare tutti gli artefatti build wvds-build clean # Installare pack wvds-build pack install --from --to ~/vendor-packs --enable tui,web # Disinstallare pack wvds-build pack uninstall --vendor --pack # Elencare pack installati wvds-build pack list ==== File di configurazione ==== **Percorso:** ''~/.wvds/wvds-build.json'' { "compilers": { "fpc": "%LAZARUS%/fpc/3.3.1/bin/fpc.exe", "pas2js": "%LAZARUS%/fpc/3.3.1/bin/pas2js.exe" }, "paths": { "packs": "~/packs", "common": "~/sources/common", "output": "~/binaries/out" }, "defaults": { "target": "web", "mode": "debug" }, "targets": { "tui": { "compiler": "fpc", "enabled": true }, "desktop": { "compiler": "fpc", "enabled": true }, "web": { "compiler": "pas2js", "enabled": true } } } ==== Task VS Code ==== I task vengono generati automaticamente: // .vscode/tasks.json (generato) { "version": "2.0.0", "tasks": [ { "label": "WVDS: Build TUI", "type": "shell", "command": "${workspaceFolder}/.wvds/bin/wvds-build", "args": ["build", "tui"] }, { "label": "WVDS: Build Desktop", "type": "shell", "command": "${workspaceFolder}/.wvds/bin/wvds-build", "args": ["build", "desktop"] }, { "label": "WVDS: Build Web", "type": "shell", "command": "${workspaceFolder}/.wvds/bin/wvds-build", "args": ["build", "web"] } ] } Non modificare manualmente i task - vengono generati da ''wvds-build''. ===== Integrazione CI/CD ===== # .github/workflows/build.yml build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install FPC run: sudo apt-get install fpc - name: Install pas2js run: sudo apt-get install pas2js - name: Build run: wvds-build --mode release - name: Package run: wvds-build package ===== Risoluzione problemi ===== ==== "Unit not found" ==== * Verificare percorsi unit in build.cfg * Verificare maiuscole/minuscole (Linux) ==== "JavaScript error" ==== * Usare source map per debugging * Verificare warning nell'output pas2js ==== "VSIX invalid" ==== * Validare package.json * README.md deve esistere * Verificare percorso icona ===== Vedi anche ===== * [[.:targets|Target di build]] * [[.:release|Processo di release]] * [[.:testing|Testing]]