Zum Inhalt springen

Plattform-Erkennung

pubm bringt eine eingebaute Plattform-Erkennungs-Engine mit, die OS, Architektur, ABI und Varianten aus Dateipfaden analysiert. Sie bildet die Grundlage für automatische Asset-Benennung, OS-abhängige Standardwerte bei der Komprimierung und das strukturierte ParsedPlatform-Objekt, das von Plugins wie @pubm/plugin-brew verwendet wird.

Wenn du einen releaseAssets-Eintrag konfigurierst, untersucht pubm jeden passenden Dateipfad, um seine Plattform zu bestimmen.

Es gibt zwei Modi:

Capture-Variablen im Pfadmuster. Wenn das Muster {os}, {arch}, {abi}, {variant} oder {platform} enthaelt, extrahiert pubm Werte direkt aus diesen Positionen:

// Rust-artiges Triple: erfasst arch, vendor, os und abi direkt aus dem Pfad
{ path: "target/{arch}-{vendor}-{os}-{abi}/release/mytool" }
// Bun-artig: erfasst das gesamte Plattformsegment
{ path: "platforms/{platform}/bin/mytool" }

Automatisches Scannen von Segmenten. Wenn keine Capture-Variablen verwendet werden, zerlegt pubm den Pfad zuerst an / in Segmente und dann jedes Segment an -. Jedes daraus entstehende Token wird der Reihe nach gegen die Tabellen für OS, Architektur, ABI, Variante und Vendor getestet. Der erste Treffer pro Kategorie gewinnt.

// Pfad: platforms/darwin-arm64/bin/pubm
// Segment: darwin-arm64 -> Tokens: [darwin, arm64]
// darwin -> os: "darwin", arm64 -> arch: "arm64"
{ path: "platforms/*/bin/pubm" }

Tokens, die zu keiner Tabelle passen, werden ignoriert.

Die Template-Variable {platform} enthaelt den rohen Plattform-String:

  • wenn {platform} als Capture-Variable verwendet wurde: das erfasste Segment unverändert (darwin-arm64)
  • wenn einzelne Capture-Variablen verwendet wurden ({os}, {arch}): zusammengesetzt als {os}-{arch}
  • wenn automatische Erkennung verwendet wurde: das passende Pfadsegment (darwin-arm64)

Vendor, ABI und Variante werden absichtlich aus {platform} ausgeschlossen, damit der häufige Fall kurz und lesbar bleibt. Sie sind einzeln über {vendor}, {abi} und {variant} erreichbar.

interface ParsedPlatform {
/** Erfasster Rohstring oder passendes Segment */
raw: string;
os?: string;
arch?: string;
vendor?: string;
abi?: string;
variant?: string;
}

Dieses Objekt wird jedem Asset angehaengt, das durch die Pipeline laeuft, und über ReleaseAsset.platform im afterRelease-Hook sichtbar.

Kanonische Werte werden in Template-Variablen und Plugin-Vergleichen verwendet. Aliase werden während des Pfad-Parsens erkannt.

CanonicalAliases
darwinmacos, mac, osx, macosx
linuxlin
windowswin, win32, win64
freebsd
openbsd
netbsd
android
ios
solarissunos
illumos
aix
dragonflydragonflybsd
plan9
fuchsia
haiku
redox
CanonicalAliases
x64x86_64, amd64, x86-64
ia32i386, i486, i586, i686, x86, 386
arm64aarch64, armv8, aarch_64
armarmv7, armv7l, armv6, armv6l, armhf, armel
ppc64lepowerpc64le, ppc64el
ppc64powerpc64
ppcpowerpc
s390x
riscv64riscv64gc
loong64loongarch64, la64
mipsmips32
mipselmipsle
mips64
mips64elmips64le
wasm32wasm
wasm64
universaluniversal2, fat

ABI-Tokens tauchen in Rust-Zieltripletts und Toolchain-Namen für Cross-Compilation auf.

ValueMeaning
gnu / glibcGNU C Library
muslmusl libc (gut für statische Builds)
msvcMicrosoft Visual C++ Runtime
mingw / mingw32 / mingw-w64MinGW-Toolchain
gnueabihfARM hard-float mit glibc
gnueabiARM soft-float mit glibc
musleabihfARM hard-float mit musl
musleabiARM soft-float mit musl
androideabiAndroid ARM EABI
uclibcuClibc für eingebettete Targets
bionicAndroids Bionic-C-Bibliothek

Variant-Tokens beschreiben Mikroarchitektur-Stufen oder Faehigkeitsanforderungen.

ValueMeaning
baselineKein AVX2, nur SSE4.2
v2x86-64 Mikroarchitektur-Stufe 2
v3x86-64 Mikroarchitektur-Stufe 3 (AVX2)
v4x86-64 Mikroarchitektur-Stufe 4 (AVX-512)
avx2Explizite AVX2-Anforderung
avx512Explizite AVX-512-Anforderung

Vendor-Tokens werden während des Parsens erkannt, aber nicht in die {platform}-Variable aufgenommen. Du erreichst sie über {vendor}.

ValueMeaning
unknownGenerisch (Rust-Standard für Linux-Targets)
appleApple-Plattformen (macOS, iOS)
pcPC/Desktop (Windows, Solaris)
noneBare-Metal-Targets
platforms/darwin-arm64/bin/pubm
platforms/linux-x64/bin/pubm
platforms/windows-x64/bin/pubm.exe

Config:

releaseAssets: ["platforms/*/bin/pubm"]

Ergebnisse:

Pfadosarch{platform}
platforms/darwin-arm64/bin/pubmdarwinarm64darwin-arm64
platforms/linux-x64/bin/pubmlinuxx64linux-x64
platforms/windows-x64/bin/pubm.exewindowsx64windows-x64
target/x86_64-unknown-linux-gnu/release/mytool
target/aarch64-apple-darwin/release/mytool

Config:

releaseAssets: [
{ path: "target/{arch}-{vendor}-{os}-{abi}/release/mytool" },
{ path: "target/{arch}-{vendor}-{os}/release/mytool" },
]

Ergebnisse:

Pfadosarchvendorabi
x86_64-unknown-linux-gnulinuxx64unknowngnu
aarch64-apple-darwindarwinarm64apple-

Alle Aliase werden vor der Template-Ersetzung in die kanonische Form aufgeloest:

bin/myapp-amd64-macos -> os: "darwin", arch: "x64"
bin/myapp-win64 -> os: "windows"
bin/myapp-armv7l -> arch: "arm"