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

Zuletzt geändert: dne 29.01.2026 ob 22:22