====== Build-Pipeline ====== Opis Build-procesa za WvdS FPC RAD Studio. ===== Pregled ===== ┌─────────────────────────────────────────────────────────────┐ │ BUILD PIPELINE │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 1. PRE-BUILD │ │ ├── Policy-Check (wvds-lint) │ │ ├── Dependency Resolution │ │ └── Asset Preparation │ │ │ │ 2. COMPILE │ │ ├── pas2js / FPC invocation │ │ ├── Unit Resolution │ │ └── Code Generation │ │ │ │ 3. POST-BUILD │ │ ├── Bundle Assets │ │ ├── Generate Source Maps │ │ └── Copy to dist/ │ │ │ │ 4. PACKAGE (opcionalno) │ │ ├── VSIX Creation │ │ └── Version Stamping │ │ │ └─────────────────────────────────────────────────────────────┘ ===== Pre-Build ===== ==== Policy-Check ==== wvds-lint policy --path sources/ Provjerava: * P0: Nema duplikata u Extensions * P1: Nema .ts ili ručno pisanih .js * P2: Wrapperi samo u common/ * P3: Self-contained Output ==== Dependency Resolution ==== Ovisnosti se razlučuju iz ''build.cfg'' i ''package.json'': # build.cfg [build] compiler=pas2js entry=extension_main.pas [dependencies] core=../../common/core vscode=../../common/web/vscode ===== Compile ===== ==== pas2js-Kompilacija ==== pas2js \ -Jc \ # Compact output -Jirtl.js \ # RTL kao vanjski modul -Jm \ # Generiranje Source Maps -Tbrowser \ # Target: Browser -Fu../../common \ # Unit-putanje -FE./dist \ # Izlazni direktorij pas/extension_main.pas # Entry Point ==== FPC-Kompilacija ==== fpc \ -Mobjfpc \ # Object Pascal Mode -Sh \ # Ansi Strings -O3 \ # Optimizacija Level 3 -Fu../../common \ # Unit-putanje -FE./bin \ # Izlazni direktorij project.lpr # Projekt-Datoteka ==== Compiler-Opcije ==== ^ Opcija ^ pas2js ^ FPC ^ Opis ^ | Debug | -Jc -Jm | -g -O0 | Debug-simboli, bez optimizacije | | Release | -Jc -O3 | -O3 -Xs | Optimizirano, bez simbola | | Profile | -Jc -Jm | -g -O2 -pg | Profiling-Instrumentacija | ===== Post-Build ===== ==== Asset-Bundling ==== Resursi se kopiraju u ''dist/'': dist/ ├── extension_main.js # Kompilirani kod ├── extension_main.js.map # Source Map └── assets/ # Kopirani resursi ├── templates/*.html └── images/*.png ==== Source Maps ==== Source Maps omogućuju Debugging Pascal-koda: // extension_main.js.map { "version": 3, "sources": ["../pas/extension_main.pas"], "mappings": "..." } ===== Package ===== ==== VSIX-Kreiranje ==== vsce package --out binaries/dist/ Generira: ''wvds-vscode-{name}-{version}.vsix'' ==== Version Stamping ==== Verzija se čita iz ''package.json'' i ugrađuje u Build: const VERSION = {$I version.inc}; // Generirano iz package.json ===== Build-Modovi ===== ^ Mod ^ Korištenje ^ Optimizacija ^ Simboli ^ | debug | Razvoj | Bez | Da | | release | Produkcija | Maksimalna | Ne | | profile | Analiza performansi | Srednja | Da + Profiling | ===== Inkrementalni Build ===== Build koristi caching za bržu kompilaciju: * ''binaries/cache/'' sadrži kompilirane Units (.ppu, .o) * Samo promijenjene Units se rekompiliraju * ''wvds-build clean'' briše cache ===== Toolchain CLI ===== Build-Toolchain se sastoji od dva glavna alata: ==== pxamlc (PXAML Compiler) ==== Kompilira PXAML-datoteke za specifični target: pxamlc compile \ --target \ --pxaml \ --packs ~/packs \ --out ~/binaries/out// ^ Opcija ^ Opis ^ | ''%%--%%target'' | Ciljna platforma: tui, desktop, web | | ''%%--%%pxaml'' | Ulazna PXAML-datoteka | | ''%%--%%packs'' | Putanja do Pack-Registra | | ''%%--%%out'' | Izlazni direktorij | ==== wvds-build ==== Orkestrira cjelokupni Build-proces: wvds-build build \ --app ~/sources/applications/ \ --config ~/.wvds/wvds-build.json \ --out ~/binaries/out ^ Opcija ^ Opis ^ | ''%%--%%app'' | Direktorij aplikacije | | ''%%--%%config'' | Konfiguracijska datoteka | | ''%%--%%out'' | Izlazni direktorij | === Dodatne naredbe === # Brisanje svih Build-artefakata wvds-build clean # Instaliranje Packa wvds-build pack install --from --to ~/vendor-packs --enable tui,web # Deinstaliranje Packa wvds-build pack uninstall --vendor --pack # Popis instaliranih Packova wvds-build pack list ==== Konfiguracijska datoteka ==== **Putanja:** ''~/.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 } } } ==== VS Code Tasks ==== Tasks se automatski generiraju: // .vscode/tasks.json (generirano) { "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"] } ] } Ne uređujte Tasks ručno - generira ih ''wvds-build''. ===== CI/CD-Integracija ===== # .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 ===== Rješavanje problema ===== ==== "Unit not found" ==== * Provjerite Unit-putanje u build.cfg * Provjerite velika/mala slova (Linux) ==== "JavaScript error" ==== * Koristite Source Map za debugging * Provjerite pas2js-izlaz za upozorenja ==== "VSIX invalid" ==== * Validirajte package.json * README.md mora postojati * Provjerite putanju do ikone ===== Vidi također ===== * [[.:targets|Build-Targets]] * [[.:release|Release-Proces]] * [[.:testing|Testing]]