====== 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]]