====== Gradbeni cevovod ======
Opis gradbenega 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 (optional) │
│ ├── VSIX Creation │
│ └── Version Stamping │
│ │
└─────────────────────────────────────────────────────────────┘
===== Pre-Build =====
==== Preverjanje politik ====
wvds-lint policy --path sources/
Preverja:
* P0: Brez duplikatov v razširitvah
* P1: Brez .ts ali ročno pisanih .js datotek
* P2: Ovojnice samo v common/
* P3: Samozadosten izhod
==== Razreševanje odvisnosti ====
Odvisnosti se razrešijo iz ''build.cfg'' in ''package.json'':
# build.cfg
[build]
compiler=pas2js
entry=extension_main.pas
[dependencies]
core=../../common/core
vscode=../../common/web/vscode
===== Prevajanje =====
==== pas2js prevajanje ====
pas2js \
-Jc \ # Kompaktni izhod
-Jirtl.js \ # RTL kot zunanji modul
-Jm \ # Generiraj izvorne mape
-Tbrowser \ # Cilj: brskalnik
-Fu../../common \ # Poti do enot
-FE./dist \ # Izhodni imenik
pas/extension_main.pas # Vstopna točka
==== FPC prevajanje ====
fpc \
-Mobjfpc \ # Object Pascal način
-Sh \ # Ansi nizi
-O3 \ # Optimizacija stopnja 3
-Fu../../common \ # Poti do enot
-FE./bin \ # Izhodni imenik
project.lpr # Projektna datoteka
==== Možnosti prevajalnika ====
^ Možnost ^ pas2js ^ FPC ^ Opis ^
| Debug | -Jc -Jm | -g -O0 | Razhroščevalni simboli, brez optimizacije |
| Release | -Jc -O3 | -O3 -Xs | Optimizirano, brez simbolov |
| Profile | -Jc -Jm | -g -O2 -pg | Profilirna instrumentacija |
===== Post-Build =====
==== Združevanje virov ====
Viri se kopirajo v ''dist/'':
dist/
├── extension_main.js # Prevedena koda
├── extension_main.js.map # Izvorna mapa
└── assets/ # Kopirani viri
├── templates/*.html
└── images/*.png
==== Izvorne mape ====
Izvorne mape omogočajo razhroščevanje Pascal kode:
// extension_main.js.map
{
"version": 3,
"sources": ["../pas/extension_main.pas"],
"mappings": "..."
}
===== Pakiranje =====
==== Ustvarjanje VSIX ====
vsce package --out binaries/dist/
Ustvari: ''wvds-vscode-{name}-{version}.vsix''
==== Označevanje verzije ====
Verzija se prebere iz ''package.json'' in vgradi v gradnjo:
const
VERSION = {$I version.inc}; // Generirano iz package.json
===== Gradbeni načini =====
^ Način ^ Uporaba ^ Optimizacija ^ Simboli ^
| debug | Razvoj | Brez | Da |
| release | Produkcija | Maksimalna | Ne |
| profile | Analiza zmogljivosti | Srednja | Da + profiliranje |
===== Inkrementalna gradnja =====
Gradnja uporablja predpomnjenje za hitrejše prevajanje:
* ''binaries/cache/'' vsebuje prevedene enote (.ppu, .o)
* Samo spremenjene enote se ponovno prevedejo
* ''wvds-build clean'' izbriše predpomnilnik
===== Orodja CLI =====
Gradna veriga orodij sestoji iz dveh glavnih orodij:
==== pxamlc (PXAML prevajalnik) ====
Prevaja PXAML datoteke za določen cilj:
pxamlc compile \
--target \
--pxaml \
--packs ~/packs \
--out ~/binaries/out//
^ Možnost ^ Opis ^
| ''%%--%%target'' | Ciljna platforma: tui, desktop, web |
| ''%%--%%pxaml'' | Vhodna PXAML datoteka |
| ''%%--%%packs'' | Pot do Pack registra |
| ''%%--%%out'' | Izhodni imenik |
==== wvds-build ====
Orkestrira celoten gradbeni proces:
wvds-build build \
--app ~/sources/applications/ \
--config ~/.wvds/wvds-build.json \
--out ~/binaries/out
^ Možnost ^ Opis ^
| ''%%--%%app'' | Imenik aplikacije |
| ''%%--%%config'' | Konfiguracijska datoteka |
| ''%%--%%out'' | Izhodni imenik |
=== Dodatni ukazi ===
# Izbriši vse gradbene artefakte
wvds-build clean
# Namesti paket
wvds-build pack install --from --to ~/vendor-packs --enable tui,web
# Odstrani paket
wvds-build pack uninstall --vendor --pack
# Izpiši nameščene pakete
wvds-build pack list
==== Konfiguracijska datoteka ====
**Pot:** ''~/.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 opravila ====
Opravila se samodejno generirajo:
// .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"]
}
]
}
Opravil ne urejajte ročno - generira jih ''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
===== Odpravljanje težav =====
==== "Unit not found" ====
* Preverite poti do enot v build.cfg
* Preverite velike/male črke (Linux)
==== "JavaScript error" ====
* Uporabite izvorno mapo za razhroščevanje
* Preverite pas2js izhod za opozorila
==== "VSIX invalid" ====
* Validirajte package.json
* README.md mora obstajati
* Preverite pot do ikone
===== Glejte tudi =====
* [[.:targets|Gradbeni cilji]]
* [[.:release|Postopek izdaje]]
* [[.:testing|Testiranje]]