Skip to content

Translate platform identifier strings across package ecosystems.

License

Notifications You must be signed in to change notification settings

git-pkgs/platforms

platforms

Translate platform identifier strings across package ecosystems.

An ARM64 Mac is darwin/arm64 to Go, darwin-arm64 to Node, aarch64-apple-darwin to Rust, arm64-darwin to RubyGems, and macosx_11_0_arm64 to Python. This module provides a shared mapping between all of them.

import "github.com/git-pkgs/platforms"

// Parse an ecosystem-specific string into a canonical Platform
p, _ := platforms.Parse(platforms.Go, "darwin/arm64")
// p.Arch == "aarch64", p.OS == "darwin"

// Format a Platform for a different ecosystem
s, _ := platforms.Format(platforms.Rust, p)
// s == "aarch64-apple-darwin"

// Or translate directly
s, _ = platforms.Translate(platforms.Go, platforms.RubyGems, "darwin/arm64")
// s == "arm64-darwin"

// Normalize to the preferred form
s, _ = platforms.Normalize(platforms.Python, "linux_x86_64")
// s == "manylinux_2_17_x86_64"

Supported ecosystems

Ecosystem Example Format
go linux/amd64 os/arch
node darwin-arm64 os-arch
rust x86_64-unknown-linux-gnu arch-vendor-os-abi
rubygems arm64-darwin arch-os
python manylinux_2_17_x86_64 tag_version_arch
debian x86_64-linux-gnu arch-os-abi
llvm aarch64-apple-darwin arch-vendor-os
nuget linux-x64 os-arch
vcpkg x64-linux arch-os
conan Linux/armv8 os/arch (settings)
homebrew arm64_sonoma arch_codename
swift aarch64-apple-darwin LLVM triples
kotlin linuxX64 osArch (camelCase)
maven linux-aarch_64 os-arch

How it works

The mapping data lives in JSON files under data/. arches.json and oses.json map canonical names to per-ecosystem aliases. platforms.json has pre-computed full strings for common platforms that can't be composed mechanically (like RubyGems using arm64 on macOS but aarch64 on Linux).

Parsing tries the pre-computed index first, then falls back to decomposing the string using ecosystem-specific rules and resolving components through the alias tables.

See SPEC.md for the full specification.

Related

archspec (Go port) models CPU microarchitectures as a compatibility DAG -- it knows that zen3 descends from zen2 and which instruction sets each supports. This module works one level up, mapping the coarse arch/OS/ABI strings that package managers use. The two are complementary: archspec's Family() returns architecture family names (x86_64, aarch64) that match the canonical arch names used here.

License

MIT

About

Translate platform identifier strings across package ecosystems.

Resources

License

Code of conduct

Contributing

Stars

Watchers

Forks

Sponsor this project

  •  

Contributors 2

  •  
  •  

Languages