Skip to content

v0.1.2

Choose a tag to compare

@github-actions github-actions released this 18 Feb 20:16

ipcprims v0.1.2

Release date: 2026-02-15
Lifecycle phase: alpha
License: MIT OR Apache-2.0

Summary

Release pipeline: multi-platform FFI build matrix, SBOM generation, and structured draft releases — matching the sysprims/docprims release pattern. Resolves the v0.1.1 known issue where release.yml was still the minimal v0.1.0 skeleton.

release.yml Rewrite

Complete rewrite from 4-job skeleton to 14 release-specific jobs (35 total including CI workflow_call).

Release Jobs

Job Runner Purpose
validate-version ubuntu-latest Tag matches VERSION file, outputs version
ci (workflow_call) Full CI suite (21 jobs)
verify-go-bindings-assets ubuntu-latest Verify prebuilt libs for 7 platforms in Go module
build-linux ubuntu-latest (container) 4-target matrix (x64/arm64 x glibc/musl), CLI + FFI
build-macos macos-latest x64 + arm64, CLI + FFI, @rpath dylib fix
build-windows windows-latest MinGW/GNU x64, FFI only (CGo compat)
build-windows-arm64 windows-latest-arm64-s MSVC arm64, FFI only (self-hosted)
build-windows-msvc windows-latest MSVC x64 shared-only, FFI only
cbindgen ubuntu-latest (container) Generate ipcprims.h C header
sbom ubuntu-latest (container) CycloneDX SBOM via syft
verify-ffi-shared-assets ubuntu-latest Verify shared libs present, no musl shared
package-ffi-bundle ubuntu-latest Structured bundle with 8 platform dirs + MANIFEST.json
publish-check ubuntu-latest cargo package --workspace dry-run
publish ubuntu-latest Draft GitHub release with all artifacts + platform table

CLI Artifacts (6 platforms)

Platform Archive
Linux x64 (glibc) ipcprims-<version>-linux-amd64.tar.gz
Linux x64 (musl) ipcprims-<version>-linux-amd64-musl.tar.gz
Linux arm64 (glibc) ipcprims-<version>-linux-arm64.tar.gz
Linux arm64 (musl) ipcprims-<version>-linux-arm64-musl.tar.gz
macOS x64 ipcprims-<version>-darwin-amd64.tar.gz
macOS arm64 ipcprims-<version>-darwin-arm64.tar.gz

No Windows CLI — CLI requires Unix domain sockets (named pipe transport lands in v0.2.0).

FFI Bundle Structure

bundle/
  lib/
    linux-amd64/        static/ + shared/
    linux-amd64-musl/   static/ only
    linux-arm64/        static/ + shared/
    linux-arm64-musl/   static/ only
    darwin-amd64/       static/ + shared/
    darwin-arm64/       static/ + shared/
    windows-amd64/      static/ + shared/ (GNU + MSVC import libs)
    windows-arm64/      static/ + shared/ (MSVC)
  include/
    ipcprims.h
  MANIFEST.json
  VERSION
  LICENSE-MIT
  LICENSE-APACHE

Build Patterns

  • Linux: cargo-zigbuild in goneat container, glibc 2.17 baseline for GNU targets, crt-static for musl
  • macOS: native cross-compile x64+arm64, MACOSX_DEPLOYMENT_TARGET=11.0, install_name_tool -id @rpath/...
  • Windows: real Windows runners required (ring needs MSVC lib.exe); MinGW/GNU for CGo compat, MSVC for arm64 and shared-only
  • SBOM: syft CycloneDX in sbom-tools container

Peer Crate Windows Compilation

cfg-gated ipcprims-peer Unix-specific imports behind #[cfg(unix)] so ipcprims-ffi compiles on all Windows targets:

  • connector.rs: UnixDomainSocket import gated; #[cfg(not(unix))] returns TransportError::Connect with Unsupported
  • listener.rs: PeerListener struct uses #[cfg(unix)] socket / #[cfg(not(unix))] _unavailable: (); bind/accept return Unsupported
  • Tests gated with #[cfg(all(test, unix))]
  • No fake runtime support — non-Unix builds fail explicitly at the API boundary

This follows the IpcStreamInner::Unavailable placeholder pattern from ipcprims-transport. Full Windows implementation (named pipes) deferred to v0.2.0.

Adaptation from Brief

Windows x64 shared artifact names split into GNU and MSVC variants (ffi-shared-windows-amd64-gnu, ffi-shared-windows-amd64-msvc) to avoid upload-artifact name collision. Both are merged into bundle/lib/windows-amd64/shared/ in the final FFI bundle, preserving both import library variants for consumers.

Quality

  • 122 tests passing (cargo test --workspace --all-features)
  • Zero clippy warnings (--all-features)
  • make prepush green (fmt + clippy + goneat lint + test + cargo deny)
  • All dependencies permissively licensed
  • actionlint passes on release.yml

Known Issues

  • Go prebuilt libs: Not yet populated — go-bindings.yml must run before tagging to create prebuilt libs PR (d4-02 pre-tag checklist).
  • Async API: Feature flags declared but no async code exists. Planned for v0.2.0.
  • Transitive dep duplication: getrandom (0.2 + 0.3) and windows-sys (0.60 + 0.61) via jsonschema dep tree. No functional impact.

What's Next

  • v0.1.2 pre-tag: Run go-bindings.yml via workflow_dispatch, merge prebuilt libs PR, then tag
  • v0.2.0: Tokio-native async API, named pipe transport for Windows (full IpcStreamInner::NamedPipe variant), TCP transport (per DDR-0001), CLI P2 commands