Ir al contenido

Detección de plataformas

pubm incluye un motor integrado de detección de plataformas que analiza OS, arquitectura, ABI y variant a partir de rutas de archivo. Eso alimenta el nombre automático de assets, los valores por defecto de compresión según el sistema operativo y el objeto estructurado ParsedPlatform que consumen plugins como @pubm/plugin-brew.

Cuando configuras una entrada releaseAssets, pubm inspecciona cada ruta coincidente para determinar su plataforma.

Hay dos modos de funcionamiento:

Variables de captura en el patrón de ruta. Si el patrón contiene {os}, {arch}, {abi}, {variant} o {platform}, pubm extrae directamente los valores desde esas posiciones:

// Triple estilo Rust: captura arch, vendor, os y abi desde la ruta
{ path: "target/{arch}-{vendor}-{os}-{abi}/release/mytool" }
// Estilo Bun: captura todo el segmento de plataforma
{ path: "platforms/{platform}/bin/mytool" }

Escaneo automático de segmentos. Cuando no se usan variables de captura, pubm divide la ruta en segmentos con / y luego cada segmento en -. Cada token resultante se prueba contra las tablas de OS, arch, ABI, variant y vendor en ese orden. El primer match de cada categoría es el que cuenta.

// Ruta: platforms/darwin-arm64/bin/pubm
// Segmento: darwin-arm64 → tokens: [darwin, arm64]
// darwin → os: "darwin", arm64 → arch: "arm64"
{ path: "platforms/*/bin/pubm" }

Los tokens que no coinciden con ninguna tabla se ignoran.

La variable de plantilla {platform} contiene la cadena de plataforma en bruto:

  • Si {platform} era una variable de captura: el segmento capturado tal cual (darwin-arm64)
  • Si se usaron variables de captura individuales ({os}, {arch}): se construye como {os}-{arch}
  • Si se usó detección automática: el segmento de ruta coincidente (darwin-arm64)

Vendor, ABI y variant se excluyen a propósito de {platform} para que el caso común quede corto y legible. Se accede a ellos por separado con {vendor}, {abi} y {variant}.

interface ParsedPlatform {
/** Cadena capturada en bruto o segmento coincidente */
raw: string;
os?: string;
arch?: string;
vendor?: string;
abi?: string;
variant?: string;
}

Este objeto se adjunta a cada asset que atraviesa el pipeline y se expone a los plugins mediante ReleaseAsset.platform en el hook afterRelease.

Los valores canónicos se usan en las variables de plantilla y en las comparaciones de plugins. Los alias se reconocen durante el análisis de rutas.

CanónicoAlias
darwinmacos, mac, osx, macosx
linuxlin
windowswin, win32, win64
freebsd
openbsd
netbsd
android
ios
solarissunos
illumos
aix
dragonflydragonflybsd
plan9
fuchsia
haiku
redox
CanónicoAlias
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

Los tokens de ABI aparecen en triples de target de Rust y en nombres de toolchains de cross-compilation.

ValorSignificado
gnu / glibcGNU C Library
muslmusl libc (apto para estáticos)
msvcMicrosoft Visual C++ runtime
mingw / mingw32 / mingw-w64Toolchain MinGW
gnueabihfARM hard-float con glibc
gnueabiARM soft-float con glibc
musleabihfARM hard-float con musl
musleabiARM soft-float con musl
androideabiAndroid ARM EABI
uclibcuClibc para targets embebidos
bionicBiblioteca C Bionic de Android

Los tokens variant expresan niveles de microarquitectura o requisitos de capacidad.

ValorSignificado
baselineSin AVX2; solo SSE4.2
v2Nivel 2 de microarquitectura x86-64
v3Nivel 3 de microarquitectura x86-64 (AVX2)
v4Nivel 4 de microarquitectura x86-64 (AVX-512)
avx2Requisito explícito de AVX2
avx512Requisito explícito de AVX-512

Los tokens vendor se reconocen durante el análisis pero no se incluyen en la variable {platform}. Accede a ellos mediante {vendor}.

ValorSignificado
unknownGenérico (valor por defecto de Rust para targets Linux)
applePlataformas Apple (macOS, iOS)
pcPC/escritorio (Windows, Solaris)
noneTargets bare-metal
platforms/darwin-arm64/bin/pubm
platforms/linux-x64/bin/pubm
platforms/windows-x64/bin/pubm.exe

Configuración:

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

Resultados:

Rutaosarch{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

Configuración:

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

Resultados:

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

Todos los alias se resuelven a la forma canónica antes de la sustitución de plantillas:

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