Inhaltsverzeichnis

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:

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:

Toolchain CLI

Build-Toolchain se sastoji od dva glavna alata:

pxamlc (PXAML Compiler)

Kompilira PXAML-datoteke za specifični target:

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

"JavaScript error"

"VSIX invalid"

Vidi također