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