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 <tui|desktop|web> \
  --pxaml <file.pxaml> \
  --packs ~/packs \
  --out ~/binaries/out/<app>/<target>
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 <tui|desktop|web> \
  --app ~/sources/applications/<app> \
  --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 <packdir> --to ~/vendor-packs --enable tui,web
 
# Disinstallare pack
wvds-build pack uninstall --vendor <vendor> --pack <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

Zuletzt geändert: il 29/01/2026 alle 22:37