Skip to content

ci(plugin): publish Rampart native plugin artifacts - #737

Draft
afourniernv wants to merge 113 commits into
NVIDIA:mainfrom
afourniernv:ci/pii-rampart-release-artifacts
Draft

ci(plugin): publish Rampart native plugin artifacts#737
afourniernv wants to merge 113 commits into
NVIDIA:mainfrom
afourniernv:ci/pii-rampart-release-artifacts

Conversation

@afourniernv

@afourniernv afourniernv commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Overview

Build and distribute the opt-in Rampart native plugin introduced by #558 without adding Tract to Relay's default host artifacts.

This is the packaging layer of a two-PR review series. It adds deterministic platform archives, matching-platform smoke checks, and draft GitHub Release assets. It does not publish a crate, bundle the model, or change Rampart runtime behavior.

GitHub's native stack metadata cannot link these PRs because they originate from a fork. The dependency remains explicit: this PR contains #558 and must merge after it.

  • I confirm this contribution is my own work, or I have the right to submit it under this project's license.
  • I searched existing issues and open pull requests, and this does not duplicate existing work.

Details

  • Reuse the existing Rust package matrix to build Rampart for six supported targets: GNU Linux x86_64/ARM64, musl Linux x86_64/ARM64, Apple Silicon macOS, and Windows x86_64.
  • Preserve the existing Windows ARM64 CLI build, wheel, and smoke coverage while omitting only the Rampart plugin. Tract 0.23.4 cannot compile its preprocessed ARM64 assembly for the MSVC target.
  • Build each musl plugin inside the same pinned PyPA musllinux image used for runtime smoke, while leaving the existing statically linked musl CLI build unchanged.
  • Build the standalone plugin with its committed lockfile and keep its package plus local path-dependency versions aligned with release tag stamping.
  • Materialize relay-plugin.toml with the platform library path and SHA-256 digest.
  • Create reproducible .tar.gz archives on Unix targets and a .zip archive on Windows.
  • Include only the native library, manifest, configuration schema, README, Apache-2.0 license, and Rust dependency attributions. The Rampart model remains separately provisioned.
  • Verify exact archive contents, JSON/TOML parsing, path safety, duplicate rejection, library integrity, the exported registration symbol, and nemo-relay plugins validate on each matching host or Linux runtime container.
  • Upload one archive per supported target during PR CI and attach all six archives to tagged draft GitHub Releases. The existing release SHA256SUMS covers them.
  • Extend package path detection so changes to Rampart, pii-redaction, or the packaging code cannot skip Rust package CI.
  • Keep the plugin compatible with Relay 0.8 prereleases as well as stable 0.8 releases.

Local validation:

  • uv run pre-commit run --all-files
  • Existing binary-package assembly suite plus the new Rampart archive tests (17 passed total)
  • A simulated 0.8.1 version rewrite followed by cargo check --locked for the standalone plugin
  • A real Apple Silicon release build packaged through the new recipe (9.4 MB compressed)
  • Archive extraction, digest verification, dynamic loading of nemo_relay_register_plugin, and CLI manifest/integrity validation

Hosted validation:

  • Build run 31287605503 passed Check / Run, the aggregate CI Pipeline, and pr-builder / run.
  • All seven existing Relay CLI package jobs passed.
  • Rampart built and uploaded archives for all six supported targets.
  • All six matching Rampart smoke jobs verified archive integrity, loaded the native library and registration symbol, and passed CLI plugin-manifest validation.
  • Windows ARM64 passed its existing CLI binary/wheel smoke with Rampart-specific steps explicitly skipped.
  • Downloaded all six exact-head artifacts and verified the release collector requirement: five .tar.gz archives and one Windows .zip.

Where should the reviewer start?

Start with scripts/package-pii-rampart-plugin.py for the archive contract, then .github/workflows/ci_rust.yml for the build and smoke matrix. .github/workflows/ci.yaml contains the tagged-release aggregation.

This PR should merge after #558. It establishes GitHub Release archives for the optional native plugin; it does not add a crates.io publication or another registry credential path.

Related Issues: (use one of the action keywords Closes / Fixes / Resolves / Relates to)

afourniernv and others added 30 commits July 26, 2026 16:44
Signed-off-by: Alex Fournier <afournier@nvidia.com>
Signed-off-by: Alex Fournier <afournier@nvidia.com>
Signed-off-by: Alex Fournier <afournier@nvidia.com>
Signed-off-by: Alex Fournier <afournier@nvidia.com>
Signed-off-by: Alex Fournier <afournier@nvidia.com>
Signed-off-by: Alex Fournier <afournier@nvidia.com>
Signed-off-by: Alex Fournier <afournier@nvidia.com>
Signed-off-by: Alex Fournier <afournier@nvidia.com>
Signed-off-by: Alex Fournier <afournier@nvidia.com>
Signed-off-by: Alex Fournier <afournier@nvidia.com>
Signed-off-by: Alex Fournier <afournier@nvidia.com>
Signed-off-by: Alex Fournier <afournier@nvidia.com>
Signed-off-by: Alex Fournier <afournier@nvidia.com>
Signed-off-by: Alex Fournier <afournier@nvidia.com>
Signed-off-by: Alex Fournier <afournier@nvidia.com>
Signed-off-by: Will Killian <wkillian@nvidia.com>
Signed-off-by: Will Killian <wkillian@nvidia.com>
Signed-off-by: Will Killian <wkillian@nvidia.com>
Signed-off-by: Will Killian <wkillian@nvidia.com>
Signed-off-by: Will Killian <wkillian@nvidia.com>
Signed-off-by: Will Killian <wkillian@nvidia.com>
Signed-off-by: Will Killian <wkillian@nvidia.com>
Signed-off-by: Will Killian <wkillian@nvidia.com>
Signed-off-by: Will Killian <wkillian@nvidia.com>
Signed-off-by: Will Killian <wkillian@nvidia.com>
Signed-off-by: Will Killian <wkillian@nvidia.com>
Signed-off-by: Will Killian <wkillian@nvidia.com>
Signed-off-by: Will Killian <wkillian@nvidia.com>
Signed-off-by: Will Killian <wkillian@nvidia.com>
Signed-off-by: Will Killian <wkillian@nvidia.com>
@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown

License Diff

Compared against origin/main.

Lockfile license changes

Lockfile License Changes

Rust

Added

  • adler2 2.0.1 (Apache-2.0)
  • anymap3 1.1.0 (Apache-2.0)
  • byteorder 1.5.0 (MIT)
  • crc32fast 1.5.0 (Apache-2.0)
  • crunchy 0.2.4 (MIT)
  • derive-new 0.7.0 (MIT)
  • downcast-rs 2.0.2 (Apache-2.0)
  • dyn-eq 0.1.3 (MPL-2.0)
  • dyn-hash 1.0.0 (Apache-2.0)
  • filetime 0.2.29 (Apache-2.0)
  • flate2 1.1.9 (Apache-2.0)
  • float-ord 0.3.2 (Apache-2.0)
  • half 2.7.1 (Apache-2.0)
  • inventory 0.3.24 (Apache-2.0)
  • libm 0.2.16 (MIT)
  • maplit 1.0.2 (Apache-2.0)
  • matrixmultiply 0.3.11 (Apache-2.0)
  • memmap2 0.9.11 (Apache-2.0)
  • memo-map 0.3.3 (Apache-2.0)
  • minijinja 2.21.0 (Apache-2.0)
  • miniz_oxide 0.8.9 (Apache-2.0)
  • ndarray 0.17.2 (Apache-2.0)
  • nom-language 0.1.0 (MIT)
  • pastey 0.2.3 (Apache-2.0)
  • portable-atomic-util 0.2.7 (Apache-2.0)
  • primal-check 0.3.4 (Apache-2.0)
  • rand_distr 0.6.0 (Apache-2.0)
  • rawpointer 0.2.1 (Apache-2.0)
  • rayon 1.12.0 (Apache-2.0)
  • rayon-core 1.13.0 (Apache-2.0)
  • rustfft 6.4.1 (Apache-2.0)
  • safetensors 0.8.0 (Apache-2.0)
  • scan_fmt 0.2.6 (MIT)
  • simd-adler32 0.3.10 (MIT)
  • strength_reduce 0.2.4 (Apache-2.0)
  • string-interner 0.20.0 (Apache-2.0)
  • tar 0.4.46 (Apache-2.0)
  • tract-core 0.23.4 (Apache-2.0)
  • tract-data 0.23.4 (Apache-2.0)
  • tract-extra 0.23.4 (Apache-2.0)
  • tract-hir 0.23.4 (Apache-2.0)
  • tract-linalg 0.23.4 (Apache-2.0)
  • tract-nnef 0.23.4 (Apache-2.0)
  • tract-onnx 0.23.4 (Apache-2.0)
  • tract-onnx-opl 0.23.4 (Apache-2.0)
  • tract-pulse 0.23.4 (Apache-2.0)
  • tract-pulse-opl 0.23.4 (Apache-2.0)
  • tract-transformers 0.23.4 (Apache-2.0)
  • transpose 0.2.3 (Apache-2.0)
  • unicode-normalization 0.1.25 (Apache-2.0)
  • unicode_categories 0.1.1 (Apache-2.0)
  • xattr 1.6.1 (Apache-2.0)

Removed

  • None

Updated/Changed

bit-set

Before:

  • bit-set 0.8.0 (Apache-2.0)

After:

  • bit-set 0.10.0 (Apache-2.0)
  • bit-set 0.8.0 (Apache-2.0)

bit-vec

Before:

  • bit-vec 0.8.0 (Apache-2.0)

After:

  • bit-vec 0.8.0 (Apache-2.0)
  • bit-vec 0.9.1 (Apache-2.0)

erased-serde

Before:

  • erased-serde 0.4.10 (MIT OR Apache-2.0)

After:

  • erased-serde 0.4.10 (Apache-2.0)

tinyvec

Before:

  • tinyvec 1.11.0 (Zlib OR Apache-2.0 OR MIT)

After:

  • tinyvec 1.11.0 (Apache-2.0)

tinyvec_macros

Before:

  • tinyvec_macros 0.1.1 (MIT OR Apache-2.0 OR Zlib)

After:

  • tinyvec_macros 0.1.1 (Apache-2.0)

typeid

Before:

  • typeid 1.0.3 (MIT OR Apache-2.0)

After:

  • typeid 1.0.3 (Apache-2.0)

zerocopy-derive

Before:

  • zerocopy-derive 0.8.48 (BSD-2-Clause OR Apache-2.0 OR MIT)

After:

  • zerocopy-derive 0.8.48 (Apache-2.0)

Node

Added

  • None

Removed

  • None

Updated/Changed

  • None

Python

Added

  • None

Removed

  • None

Updated/Changed

  • None
Status output
[license-diff] selected languages: rust, node, python
[license-diff] generating current inventory
[license-diff] current: generating Rust inventory
[license-diff] current: Rust inventory complete (503 packages)
[license-diff] current: generating Node inventory
[license-diff] current: Node inventory complete (367 packages)
[license-diff] current: generating Python inventory
[license-diff] current: Python inventory complete (105 packages)
[license-diff] current inventory complete
[license-diff] checking out base ref origin/main into a temporary worktree
[license-diff] base: generating Rust inventory
[license-diff] base: Rust inventory complete (449 packages)
[license-diff] base: generating Node inventory
[license-diff] base: Node inventory complete (367 packages)
[license-diff] base: generating Python inventory
[license-diff] base: Python inventory complete (105 packages)
[license-diff] base inventory complete
[license-diff] removing temporary base worktree
[license-diff] comparing inventories
[license-diff] rendering Markdown output
[license-diff] done

@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown

Signed-off-by: Alex Fournier <afournier@nvidia.com>
Signed-off-by: Alex Fournier <afournier@nvidia.com>
…rtifacts

Signed-off-by: Alex Fournier <afournier@nvidia.com>
Signed-off-by: Alex Fournier <afournier@nvidia.com>
…ifacts

Signed-off-by: Alex Fournier <afournier@nvidia.com>
Signed-off-by: Alex Fournier <afournier@nvidia.com>
Signed-off-by: Alex Fournier <afournier@nvidia.com>
Signed-off-by: Alex Fournier <afournier@nvidia.com>
Signed-off-by: Alex Fournier <afournier@nvidia.com>
@afourniernv afourniernv added the DO NOT MERGE PR should not be merged; see PR for details label Aug 7, 2026
Signed-off-by: Alex Fournier <afournier@nvidia.com>
Signed-off-by: Alex Fournier <afournier@nvidia.com>
Signed-off-by: Alex Fournier <afournier@nvidia.com>
Signed-off-by: Alex Fournier <afournier@nvidia.com>
@afourniernv

Copy link
Copy Markdown
Contributor Author

/ok to test a754d53

Signed-off-by: Alex Fournier <afournier@nvidia.com>
@afourniernv

Copy link
Copy Markdown
Contributor Author

/ok to test 908719d

Signed-off-by: Alex Fournier <afournier@nvidia.com>
@afourniernv

Copy link
Copy Markdown
Contributor Author

/ok to test e5b1165

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

DO NOT MERGE PR should not be merged; see PR for details lang:python PR changes/introduces Python code lang:rust PR changes/introduces Rust code Maintenance CI or Build or general repository maintenance size:XXL PR is very large

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants