merriv 0.1.0a2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- merriv-0.1.0a2/.gitattributes +8 -0
- merriv-0.1.0a2/.github/CODEOWNERS +12 -0
- merriv-0.1.0a2/.github/ISSUE_TEMPLATE/bug.yml +32 -0
- merriv-0.1.0a2/.github/ISSUE_TEMPLATE/config.yml +8 -0
- merriv-0.1.0a2/.github/ISSUE_TEMPLATE/external-reproduction.yml +44 -0
- merriv-0.1.0a2/.github/ISSUE_TEMPLATE/mcr-compatibility.yml +40 -0
- merriv-0.1.0a2/.github/ISSUE_TEMPLATE/plugin.yml +39 -0
- merriv-0.1.0a2/.github/PULL_REQUEST_TEMPLATE.md +25 -0
- merriv-0.1.0a2/.github/dependabot.yml +16 -0
- merriv-0.1.0a2/.github/workflows/ci.yml +175 -0
- merriv-0.1.0a2/.github/workflows/dependency-review.yml +18 -0
- merriv-0.1.0a2/.github/workflows/nvidia-vertical.yml +59 -0
- merriv-0.1.0a2/.github/workflows/release.yml +106 -0
- merriv-0.1.0a2/.github/workflows/scorecard.yml +39 -0
- merriv-0.1.0a2/.gitignore +45 -0
- merriv-0.1.0a2/CHANGELOG.md +154 -0
- merriv-0.1.0a2/CITATION.cff +20 -0
- merriv-0.1.0a2/CODE_OF_CONDUCT.md +30 -0
- merriv-0.1.0a2/CONTRIBUTING.md +63 -0
- merriv-0.1.0a2/LICENSE +175 -0
- merriv-0.1.0a2/PKG-INFO +323 -0
- merriv-0.1.0a2/README.md +281 -0
- merriv-0.1.0a2/ROADMAP.md +97 -0
- merriv-0.1.0a2/SECURITY.md +103 -0
- merriv-0.1.0a2/SUPPORT.md +19 -0
- merriv-0.1.0a2/action-requirements.lock +216 -0
- merriv-0.1.0a2/action.yml +132 -0
- merriv-0.1.0a2/corpus/README.md +17 -0
- merriv-0.1.0a2/corpus/backlog.md +21 -0
- merriv-0.1.0a2/corpus/cases/llamacpp-22544-tensor-type-regression.json +22 -0
- merriv-0.1.0a2/corpus/cases/modelopt-tensorrt-calibration-regression.json +21 -0
- merriv-0.1.0a2/corpus/cases/onnx-calibration-range-regression.json +18 -0
- merriv-0.1.0a2/corpus/cases/onnx-opset-upgrade-control.json +17 -0
- merriv-0.1.0a2/corpus/cases/recorded-rare-slice-regression.json +19 -0
- merriv-0.1.0a2/corpus/index.json +10 -0
- merriv-0.1.0a2/docs/architecture.md +161 -0
- merriv-0.1.0a2/docs/brand.md +51 -0
- merriv-0.1.0a2/docs/competitive-landscape.md +52 -0
- merriv-0.1.0a2/docs/external-producers.md +72 -0
- merriv-0.1.0a2/docs/external-reproduction-guide.md +23 -0
- merriv-0.1.0a2/docs/images/merriv-release-evidence-flow.svg +215 -0
- merriv-0.1.0a2/docs/images/source/merriv-release-evidence-flow.drawio +158 -0
- merriv-0.1.0a2/docs/mcr-0.4-migration.md +38 -0
- merriv-0.1.0a2/docs/mcr-certification.md +25 -0
- merriv-0.1.0a2/docs/mcr-changelog.md +47 -0
- merriv-0.1.0a2/docs/mcr-compatibility.md +36 -0
- merriv-0.1.0a2/docs/mcr-conformance.md +74 -0
- merriv-0.1.0a2/docs/mcr-specification.md +133 -0
- merriv-0.1.0a2/docs/plugin-sdk.md +79 -0
- merriv-0.1.0a2/docs/protocol-governance.md +35 -0
- merriv-0.1.0a2/docs/quickstart.md +101 -0
- merriv-0.1.0a2/docs/release-checklist.md +44 -0
- merriv-0.1.0a2/docs/release-evidence-case-study.md +225 -0
- merriv-0.1.0a2/docs/statistical-gating.md +42 -0
- merriv-0.1.0a2/docs/supply-chain-interop.md +129 -0
- merriv-0.1.0a2/examples/api_compare/README.md +41 -0
- merriv-0.1.0a2/examples/api_compare/policy.yaml +13 -0
- merriv-0.1.0a2/examples/api_compare/suite.jsonl +3 -0
- merriv-0.1.0a2/examples/checkpoint_bisect/README.md +12 -0
- merriv-0.1.0a2/examples/checkpoint_bisect/checkpoints.jsonl +6 -0
- merriv-0.1.0a2/examples/content_identity/README.md +24 -0
- merriv-0.1.0a2/examples/content_identity/float-vectors.json +5128 -0
- merriv-0.1.0a2/examples/content_identity/generate_vectors.py +286 -0
- merriv-0.1.0a2/examples/content_identity/golden-vectors.json +280 -0
- merriv-0.1.0a2/examples/content_identity/typed_values.py +47 -0
- merriv-0.1.0a2/examples/content_identity/verify_golden.mjs +151 -0
- merriv-0.1.0a2/examples/content_identity/verify_golden.py +72 -0
- merriv-0.1.0a2/examples/custom_executor/README.md +20 -0
- merriv-0.1.0a2/examples/custom_executor/tagged_local_executor.py +53 -0
- merriv-0.1.0a2/examples/custom_metric_plugin/README.md +21 -0
- merriv-0.1.0a2/examples/custom_metric_plugin/length_metric.py +43 -0
- merriv-0.1.0a2/examples/historical_llamacpp_22544/README.md +26 -0
- merriv-0.1.0a2/examples/historical_llamacpp_22544/baseline.jsonl +2 -0
- merriv-0.1.0a2/examples/historical_llamacpp_22544/candidate.jsonl +2 -0
- merriv-0.1.0a2/examples/historical_llamacpp_22544/policy.yaml +10 -0
- merriv-0.1.0a2/examples/historical_llamacpp_22544/suite.jsonl +2 -0
- merriv-0.1.0a2/examples/independent_producer/README.md +14 -0
- merriv-0.1.0a2/examples/independent_producer/generate_bundle.py +322 -0
- merriv-0.1.0a2/examples/mcr_conformance/README.md +39 -0
- merriv-0.1.0a2/examples/mcr_conformance/block/mcr-report.json +86 -0
- merriv-0.1.0a2/examples/mcr_conformance/error/mcr-report.json +69 -0
- merriv-0.1.0a2/examples/mcr_conformance/full/artifact-diff.json +23 -0
- merriv-0.1.0a2/examples/mcr_conformance/full/evidence-manifest.json +30 -0
- merriv-0.1.0a2/examples/mcr_conformance/full/mcr-report.json +95 -0
- merriv-0.1.0a2/examples/mcr_conformance/full/numerical-diff.json +30 -0
- merriv-0.1.0a2/examples/mcr_conformance/full/release-plan.json +32 -0
- merriv-0.1.0a2/examples/mcr_conformance/generate_fixtures.py +91 -0
- merriv-0.1.0a2/examples/mcr_conformance/insufficient_power/mcr-report.json +86 -0
- merriv-0.1.0a2/examples/mcr_conformance/negative/decision-mismatch/mcr-report.json +86 -0
- merriv-0.1.0a2/examples/mcr_conformance/negative/missing-evidence/mcr-report.json +94 -0
- merriv-0.1.0a2/examples/mcr_conformance/negative/tampered-id/mcr-report.json +86 -0
- merriv-0.1.0a2/examples/mcr_conformance/negative/unknown-version/mcr-report.json +86 -0
- merriv-0.1.0a2/examples/mcr_conformance/pass/mcr-report.json +86 -0
- merriv-0.1.0a2/examples/mcr_conformance/warn/mcr-report.json +86 -0
- merriv-0.1.0a2/examples/nvidia_tensorrt_vertical/README.md +101 -0
- merriv-0.1.0a2/examples/nvidia_tensorrt_vertical/build_artifacts.py +192 -0
- merriv-0.1.0a2/examples/nvidia_tensorrt_vertical/data_loader.py +35 -0
- merriv-0.1.0a2/examples/nvidia_tensorrt_vertical/policy.yaml +11 -0
- merriv-0.1.0a2/examples/nvidia_tensorrt_vertical/reference-receipt-rtx4060-20260829.json +73 -0
- merriv-0.1.0a2/examples/nvidia_tensorrt_vertical/requirements-modelopt.lock +1027 -0
- merriv-0.1.0a2/examples/nvidia_tensorrt_vertical/requirements-modelopt.txt +5 -0
- merriv-0.1.0a2/examples/nvidia_tensorrt_vertical/requirements-tensorrt-cu125-windows.lock +110 -0
- merriv-0.1.0a2/examples/nvidia_tensorrt_vertical/requirements-tensorrt-cu125-windows.txt +8 -0
- merriv-0.1.0a2/examples/nvidia_tensorrt_vertical/run_vertical.py +733 -0
- merriv-0.1.0a2/examples/onnx_opset_upgrade/README.md +19 -0
- merriv-0.1.0a2/examples/onnx_opset_upgrade/run_demo.py +130 -0
- merriv-0.1.0a2/examples/onnx_quantization/README.md +103 -0
- merriv-0.1.0a2/examples/onnx_quantization/assets/digits-mlp-fp32.onnx.b64 +135 -0
- merriv-0.1.0a2/examples/onnx_quantization/run_demo.py +419 -0
- merriv-0.1.0a2/examples/recorded_compare/README.md +29 -0
- merriv-0.1.0a2/examples/recorded_compare/baseline.jsonl +20 -0
- merriv-0.1.0a2/examples/recorded_compare/candidate.jsonl +20 -0
- merriv-0.1.0a2/examples/recorded_compare/github-actions.yml +38 -0
- merriv-0.1.0a2/examples/recorded_compare/policy.yaml +11 -0
- merriv-0.1.0a2/examples/recorded_compare/suite.jsonl +20 -0
- merriv-0.1.0a2/integrations/mlflow_mcr/README.md +27 -0
- merriv-0.1.0a2/integrations/mlflow_mcr/consume.py +163 -0
- merriv-0.1.0a2/integrations/mlflow_mcr/consumer-receipt.json +43 -0
- merriv-0.1.0a2/integrations/polygraphy_mcr/README.md +35 -0
- merriv-0.1.0a2/integrations/polygraphy_mcr/normalized-results.json +17 -0
- merriv-0.1.0a2/integrations/polygraphy_mcr/policy.yaml +7 -0
- merriv-0.1.0a2/integrations/polygraphy_mcr/produce.py +193 -0
- merriv-0.1.0a2/pyproject.toml +97 -0
- merriv-0.1.0a2/reference/mcr-reference-rust/Cargo.lock +205 -0
- merriv-0.1.0a2/reference/mcr-reference-rust/Cargo.toml +19 -0
- merriv-0.1.0a2/reference/mcr-reference-rust/README.md +28 -0
- merriv-0.1.0a2/reference/mcr-reference-rust/simple-evidence.json +15 -0
- merriv-0.1.0a2/reference/mcr-reference-rust/src/main.rs +793 -0
- merriv-0.1.0a2/rfcs/0001-project-scope.md +24 -0
- merriv-0.1.0a2/rfcs/0012-content-identity-canonicalization.md +86 -0
- merriv-0.1.0a2/rfcs/0014-mcr-protocol-and-conformance.md +30 -0
- merriv-0.1.0a2/rfcs/0015-mcr-0.4-evidence-identity-and-target-root.md +66 -0
- merriv-0.1.0a2/schemas/mcr-0.4/ArtifactDiff.schema.json +249 -0
- merriv-0.1.0a2/schemas/mcr-0.4/ArtifactProfile.schema.json +332 -0
- merriv-0.1.0a2/schemas/mcr-0.4/BackendComparisonEvidence.schema.json +317 -0
- merriv-0.1.0a2/schemas/mcr-0.4/BuildProvenanceEvidence.schema.json +168 -0
- merriv-0.1.0a2/schemas/mcr-0.4/Claim.schema.json +111 -0
- merriv-0.1.0a2/schemas/mcr-0.4/CompiledReleasePlan.schema.json +264 -0
- merriv-0.1.0a2/schemas/mcr-0.4/ConsumerConformanceReceipt.schema.json +100 -0
- merriv-0.1.0a2/schemas/mcr-0.4/EvalCase.schema.json +71 -0
- merriv-0.1.0a2/schemas/mcr-0.4/EvidenceManifest.schema.json +120 -0
- merriv-0.1.0a2/schemas/mcr-0.4/EvidenceManifestRef.schema.json +41 -0
- merriv-0.1.0a2/schemas/mcr-0.4/EvidenceRef.schema.json +44 -0
- merriv-0.1.0a2/schemas/mcr-0.4/EvidenceSet.schema.json +33 -0
- merriv-0.1.0a2/schemas/mcr-0.4/ExecutorDescriptor.schema.json +38 -0
- merriv-0.1.0a2/schemas/mcr-0.4/GateDecision.schema.json +262 -0
- merriv-0.1.0a2/schemas/mcr-0.4/GatePolicy.schema.json +152 -0
- merriv-0.1.0a2/schemas/mcr-0.4/MCRArtifactManifest.schema.json +131 -0
- merriv-0.1.0a2/schemas/mcr-0.4/MCRConformanceResult.schema.json +148 -0
- merriv-0.1.0a2/schemas/mcr-0.4/MCRInTotoStatement.schema.json +858 -0
- merriv-0.1.0a2/schemas/mcr-0.4/MCRVerification.schema.json +242 -0
- merriv-0.1.0a2/schemas/mcr-0.4/ModelChangeReport.schema.json +773 -0
- merriv-0.1.0a2/schemas/mcr-0.4/ModelRef.schema.json +28 -0
- merriv-0.1.0a2/schemas/mcr-0.4/ModelSnapshot.schema.json +316 -0
- merriv-0.1.0a2/schemas/mcr-0.4/NumericalDiff.schema.json +181 -0
- merriv-0.1.0a2/schemas/mcr-0.4/Observation.schema.json +107 -0
- merriv-0.1.0a2/schemas/mcr-0.4/PluginManifest.schema.json +65 -0
- merriv-0.1.0a2/schemas/mcr-0.4/RunManifest.schema.json +158 -0
- merriv-0.1.0a2/schemas/mcr-0.4/RuntimeProfile.schema.json +113 -0
- merriv-0.1.0a2/schemas/mcr-0.4/SnapshotArtifactManifest.schema.json +388 -0
- merriv-0.1.0a2/schemas/mcr-0.4/TargetEvidenceManifest.schema.json +269 -0
- merriv-0.1.0a2/schemas/mcr-0.4/TargetEvidenceVerification.schema.json +56 -0
- merriv-0.1.0a2/schemas/mcr-0.4/ToolNativeEvidence.schema.json +123 -0
- merriv-0.1.0a2/src/merriv/__init__.py +39 -0
- merriv-0.1.0a2/src/merriv/adapters/__init__.py +19 -0
- merriv-0.1.0a2/src/merriv/adapters/base.py +40 -0
- merriv-0.1.0a2/src/merriv/adapters/fake.py +51 -0
- merriv-0.1.0a2/src/merriv/adapters/onnx_runtime.py +278 -0
- merriv-0.1.0a2/src/merriv/adapters/openai_compatible.py +793 -0
- merriv-0.1.0a2/src/merriv/adapters/recorded.py +85 -0
- merriv-0.1.0a2/src/merriv/artifacts/__init__.py +57 -0
- merriv-0.1.0a2/src/merriv/artifacts/diff.py +146 -0
- merriv-0.1.0a2/src/merriv/artifacts/inspector.py +420 -0
- merriv-0.1.0a2/src/merriv/artifacts/models.py +177 -0
- merriv-0.1.0a2/src/merriv/artifacts/numerical.py +416 -0
- merriv-0.1.0a2/src/merriv/attestation.py +72 -0
- merriv-0.1.0a2/src/merriv/bisect/__init__.py +49 -0
- merriv-0.1.0a2/src/merriv/bisect/engine.py +422 -0
- merriv-0.1.0a2/src/merriv/bisect/execution.py +110 -0
- merriv-0.1.0a2/src/merriv/bisect/manifest.py +95 -0
- merriv-0.1.0a2/src/merriv/cli.py +849 -0
- merriv-0.1.0a2/src/merriv/conformance.py +335 -0
- merriv-0.1.0a2/src/merriv/core/__init__.py +1 -0
- merriv-0.1.0a2/src/merriv/core/identity.py +358 -0
- merriv-0.1.0a2/src/merriv/core/models.py +311 -0
- merriv-0.1.0a2/src/merriv/core/schema.py +89 -0
- merriv-0.1.0a2/src/merriv/demo.py +104 -0
- merriv-0.1.0a2/src/merriv/engine/__init__.py +29 -0
- merriv-0.1.0a2/src/merriv/engine/cache.py +306 -0
- merriv-0.1.0a2/src/merriv/engine/runner.py +303 -0
- merriv-0.1.0a2/src/merriv/evidence.py +342 -0
- merriv-0.1.0a2/src/merriv/execution/__init__.py +11 -0
- merriv-0.1.0a2/src/merriv/execution/base.py +53 -0
- merriv-0.1.0a2/src/merriv/execution/local.py +39 -0
- merriv-0.1.0a2/src/merriv/gate/__init__.py +27 -0
- merriv-0.1.0a2/src/merriv/gate/policy.py +515 -0
- merriv-0.1.0a2/src/merriv/importers/__init__.py +15 -0
- merriv-0.1.0a2/src/merriv/importers/polygraphy.py +185 -0
- merriv-0.1.0a2/src/merriv/io/__init__.py +31 -0
- merriv-0.1.0a2/src/merriv/io/json.py +84 -0
- merriv-0.1.0a2/src/merriv/io/loaders.py +197 -0
- merriv-0.1.0a2/src/merriv/metrics/__init__.py +6 -0
- merriv-0.1.0a2/src/merriv/metrics/base.py +32 -0
- merriv-0.1.0a2/src/merriv/metrics/builtin.py +42 -0
- merriv-0.1.0a2/src/merriv/oci.py +220 -0
- merriv-0.1.0a2/src/merriv/pipeline.py +613 -0
- merriv-0.1.0a2/src/merriv/planning/__init__.py +27 -0
- merriv-0.1.0a2/src/merriv/planning/compiler.py +313 -0
- merriv-0.1.0a2/src/merriv/planning/models.py +66 -0
- merriv-0.1.0a2/src/merriv/plugins/__init__.py +32 -0
- merriv-0.1.0a2/src/merriv/plugins/builtin.py +33 -0
- merriv-0.1.0a2/src/merriv/plugins/models.py +41 -0
- merriv-0.1.0a2/src/merriv/plugins/registry.py +330 -0
- merriv-0.1.0a2/src/merriv/py.typed +1 -0
- merriv-0.1.0a2/src/merriv/reports/__init__.py +50 -0
- merriv-0.1.0a2/src/merriv/reports/ci.py +140 -0
- merriv-0.1.0a2/src/merriv/reports/io.py +195 -0
- merriv-0.1.0a2/src/merriv/reports/models.py +405 -0
- merriv-0.1.0a2/src/merriv/reports/render.py +160 -0
- merriv-0.1.0a2/src/merriv/reports/verify.py +709 -0
- merriv-0.1.0a2/src/merriv/stats/__init__.py +21 -0
- merriv-0.1.0a2/src/merriv/stats/paired.py +276 -0
- merriv-0.1.0a2/src/merriv/target.py +259 -0
- merriv-0.1.0a2/tests/test_adapter_contract.py +42 -0
- merriv-0.1.0a2/tests/test_adversarial.py +126 -0
- merriv-0.1.0a2/tests/test_api_adapter.py +583 -0
- merriv-0.1.0a2/tests/test_artifacts_onnx.py +411 -0
- merriv-0.1.0a2/tests/test_backend_evidence.py +74 -0
- merriv-0.1.0a2/tests/test_bisect.py +254 -0
- merriv-0.1.0a2/tests/test_bisect_execution.py +138 -0
- merriv-0.1.0a2/tests/test_cli.py +254 -0
- merriv-0.1.0a2/tests/test_contracts.py +125 -0
- merriv-0.1.0a2/tests/test_evidence_graph.py +280 -0
- merriv-0.1.0a2/tests/test_identity.py +216 -0
- merriv-0.1.0a2/tests/test_integrations.py +92 -0
- merriv-0.1.0a2/tests/test_pipeline_demo.py +31 -0
- merriv-0.1.0a2/tests/test_recorded_cli.py +248 -0
- merriv-0.1.0a2/tests/test_reports.py +814 -0
- merriv-0.1.0a2/tests/test_runner_cache.py +222 -0
- merriv-0.1.0a2/tests/test_security_hardening.py +343 -0
- merriv-0.1.0a2/tests/test_stage4_adversarial.py +952 -0
- merriv-0.1.0a2/tests/test_stage4_cli_metrics.py +201 -0
- merriv-0.1.0a2/tests/test_stage5_sdk_planning.py +683 -0
- merriv-0.1.0a2/tests/test_stats_gate.py +292 -0
- merriv-0.1.0a2/tests/test_supply_chain.py +184 -0
- merriv-0.1.0a2/tools/regenerate_onnx_demo_fixture.py +90 -0
- merriv-0.1.0a2/tools/verify_onnx_demo.py +175 -0
- merriv-0.1.0a2/tools/verify_regression_corpus.py +139 -0
- merriv-0.1.0a2/tools/verify_rust_interop.py +68 -0
- merriv-0.1.0a2/uv.lock +1362 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Bootstrap ownership. RFCs can split these paths as reviewers are added.
|
|
2
|
+
* @niansia
|
|
3
|
+
|
|
4
|
+
/schemas/ @niansia
|
|
5
|
+
/src/merriv/core/ @niansia
|
|
6
|
+
/src/merriv/gate/ @niansia
|
|
7
|
+
/src/merriv/reports/ @niansia
|
|
8
|
+
/src/merriv/evidence.py @niansia
|
|
9
|
+
/src/merriv/target.py @niansia
|
|
10
|
+
/rfcs/ @niansia
|
|
11
|
+
/docs/mcr-*.md @niansia
|
|
12
|
+
/.github/workflows/ @niansia
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
name: Bug report
|
|
2
|
+
description: Report incorrect release evidence, behavior, or compatibility
|
|
3
|
+
title: "[Bug]: "
|
|
4
|
+
labels: ["bug"]
|
|
5
|
+
body:
|
|
6
|
+
- type: markdown
|
|
7
|
+
attributes:
|
|
8
|
+
value: Do not include credentials or private model outputs. Use SECURITY.md for vulnerabilities.
|
|
9
|
+
- type: textarea
|
|
10
|
+
id: outcome
|
|
11
|
+
attributes:
|
|
12
|
+
label: Observed and expected outcome
|
|
13
|
+
validations:
|
|
14
|
+
required: true
|
|
15
|
+
- type: textarea
|
|
16
|
+
id: reproduce
|
|
17
|
+
attributes:
|
|
18
|
+
label: Minimal reproduction
|
|
19
|
+
description: Include sanitized suite/policy fragments and exact exit status.
|
|
20
|
+
validations:
|
|
21
|
+
required: true
|
|
22
|
+
- type: input
|
|
23
|
+
id: version
|
|
24
|
+
attributes:
|
|
25
|
+
label: Merriv and Python versions
|
|
26
|
+
validations:
|
|
27
|
+
required: true
|
|
28
|
+
- type: textarea
|
|
29
|
+
id: environment
|
|
30
|
+
attributes:
|
|
31
|
+
label: Execution environment
|
|
32
|
+
description: OS, adapter, executor, and relevant non-secret revisions.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
blank_issues_enabled: false
|
|
2
|
+
contact_links:
|
|
3
|
+
- name: Security vulnerability
|
|
4
|
+
url: https://github.com/niansia/Merriv/security/advisories/new
|
|
5
|
+
about: Report vulnerabilities privately; never post exploit details in an issue.
|
|
6
|
+
- name: Support policy
|
|
7
|
+
url: https://github.com/niansia/Merriv/blob/main/SUPPORT.md
|
|
8
|
+
about: Read what information to include and which reports belong elsewhere.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
name: External reproduction
|
|
2
|
+
description: Submit an independently executed corpus or target-GPU result
|
|
3
|
+
title: "[Reproduction]: "
|
|
4
|
+
labels: ["reproduction", "evidence"]
|
|
5
|
+
body:
|
|
6
|
+
- type: input
|
|
7
|
+
id: source
|
|
8
|
+
attributes:
|
|
9
|
+
label: Source commit
|
|
10
|
+
validations:
|
|
11
|
+
required: true
|
|
12
|
+
- type: input
|
|
13
|
+
id: target
|
|
14
|
+
attributes:
|
|
15
|
+
label: Hardware, runtime, and driver
|
|
16
|
+
validations:
|
|
17
|
+
required: true
|
|
18
|
+
- type: input
|
|
19
|
+
id: root
|
|
20
|
+
attributes:
|
|
21
|
+
label: Target evidence ID and archive SHA-256
|
|
22
|
+
validations:
|
|
23
|
+
required: true
|
|
24
|
+
- type: textarea
|
|
25
|
+
id: commands
|
|
26
|
+
attributes:
|
|
27
|
+
label: Commands and verification results
|
|
28
|
+
validations:
|
|
29
|
+
required: true
|
|
30
|
+
- type: textarea
|
|
31
|
+
id: deviations
|
|
32
|
+
attributes:
|
|
33
|
+
label: Deviations, unavailable fields, and limitations
|
|
34
|
+
validations:
|
|
35
|
+
required: true
|
|
36
|
+
- type: checkboxes
|
|
37
|
+
id: independence
|
|
38
|
+
attributes:
|
|
39
|
+
label: Independence
|
|
40
|
+
options:
|
|
41
|
+
- label: I controlled the execution environment and did not reuse the project's generated evidence archive.
|
|
42
|
+
required: true
|
|
43
|
+
- label: No credentials, proprietary artifacts, or private model outputs are attached.
|
|
44
|
+
required: true
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
name: Model Change Report compatibility
|
|
2
|
+
description: Report a producer, consumer, schema, or identity interoperability issue
|
|
3
|
+
title: "[Model Change Report compatibility]: "
|
|
4
|
+
labels: ["compatibility", "mcr"]
|
|
5
|
+
body:
|
|
6
|
+
- type: markdown
|
|
7
|
+
attributes:
|
|
8
|
+
value: Do not include private evidence or vulnerability details.
|
|
9
|
+
- type: input
|
|
10
|
+
id: implementation
|
|
11
|
+
attributes:
|
|
12
|
+
label: Implementation and revision
|
|
13
|
+
validations:
|
|
14
|
+
required: true
|
|
15
|
+
- type: input
|
|
16
|
+
id: mcr_version
|
|
17
|
+
attributes:
|
|
18
|
+
label: Exact Model Change Report version
|
|
19
|
+
validations:
|
|
20
|
+
required: true
|
|
21
|
+
- type: dropdown
|
|
22
|
+
id: role
|
|
23
|
+
attributes:
|
|
24
|
+
label: Role
|
|
25
|
+
options: [Producer, Consumer, Verifier, Identity implementation]
|
|
26
|
+
validations:
|
|
27
|
+
required: true
|
|
28
|
+
- type: textarea
|
|
29
|
+
id: command
|
|
30
|
+
attributes:
|
|
31
|
+
label: Sanitized command and output
|
|
32
|
+
description: Include exit code and smallest public fixture or receipt.
|
|
33
|
+
validations:
|
|
34
|
+
required: true
|
|
35
|
+
- type: textarea
|
|
36
|
+
id: mismatch
|
|
37
|
+
attributes:
|
|
38
|
+
label: Expected and observed semantics
|
|
39
|
+
validations:
|
|
40
|
+
required: true
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
name: Plugin or integration proposal
|
|
2
|
+
description: Propose an adapter, paired metric, executor, or Model Change Report integration
|
|
3
|
+
title: "[Plugin]: "
|
|
4
|
+
labels: ["plugin", "proposal"]
|
|
5
|
+
body:
|
|
6
|
+
- type: dropdown
|
|
7
|
+
id: kind
|
|
8
|
+
attributes:
|
|
9
|
+
label: Extension kind
|
|
10
|
+
options: [Adapter, Paired metric, Executor, Model Change Report producer/consumer]
|
|
11
|
+
validations:
|
|
12
|
+
required: true
|
|
13
|
+
- type: textarea
|
|
14
|
+
id: user
|
|
15
|
+
attributes:
|
|
16
|
+
label: User and release workflow
|
|
17
|
+
description: Who needs this and which release decision does it enable?
|
|
18
|
+
validations:
|
|
19
|
+
required: true
|
|
20
|
+
- type: textarea
|
|
21
|
+
id: evidence
|
|
22
|
+
attributes:
|
|
23
|
+
label: Evidence contract
|
|
24
|
+
description: Inputs, outputs, capabilities, units/direction, and limitations.
|
|
25
|
+
validations:
|
|
26
|
+
required: true
|
|
27
|
+
- type: textarea
|
|
28
|
+
id: identity
|
|
29
|
+
attributes:
|
|
30
|
+
label: Reproducibility and non-secret identity
|
|
31
|
+
description: What config/revision enters snapshot, manifest, executor, and cache identity?
|
|
32
|
+
validations:
|
|
33
|
+
required: true
|
|
34
|
+
- type: textarea
|
|
35
|
+
id: threats
|
|
36
|
+
attributes:
|
|
37
|
+
label: Trust boundary and resource limits
|
|
38
|
+
validations:
|
|
39
|
+
required: true
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
## Problem and outcome
|
|
2
|
+
<!-- What user/release-engineering problem does this solve? -->
|
|
3
|
+
|
|
4
|
+
## Evidence and verification
|
|
5
|
+
|
|
6
|
+
- [ ] Deterministic tests added or updated
|
|
7
|
+
- [ ] `uv run --frozen ruff check .` passes
|
|
8
|
+
- [ ] `uv run --frozen mypy src` passes
|
|
9
|
+
- [ ] `uv run --frozen pytest` passes
|
|
10
|
+
- [ ] Public schema output checked when contracts changed
|
|
11
|
+
|
|
12
|
+
## Compatibility and security
|
|
13
|
+
|
|
14
|
+
- [ ] No public contract or behavior change
|
|
15
|
+
- [ ] Or: RFC/migration notes linked below
|
|
16
|
+
- [ ] Secrets, raw private outputs, and credential hashes are absent from identity,
|
|
17
|
+
cache, reports, logs, and exceptions
|
|
18
|
+
- [ ] Resource/cost limits and fail-closed behavior were considered
|
|
19
|
+
|
|
20
|
+
## Plugin/executor changes
|
|
21
|
+
|
|
22
|
+
- [ ] Not applicable
|
|
23
|
+
- [ ] Manifest/API version and non-secret config identity documented
|
|
24
|
+
- [ ] Capabilities and mutation behavior tested
|
|
25
|
+
- [ ] Trust/isolation boundary documented
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
version: 2
|
|
2
|
+
updates:
|
|
3
|
+
- package-ecosystem: pip
|
|
4
|
+
directory: "/"
|
|
5
|
+
schedule:
|
|
6
|
+
interval: weekly
|
|
7
|
+
cooldown:
|
|
8
|
+
default-days: 7
|
|
9
|
+
open-pull-requests-limit: 5
|
|
10
|
+
- package-ecosystem: github-actions
|
|
11
|
+
directory: "/"
|
|
12
|
+
schedule:
|
|
13
|
+
interval: weekly
|
|
14
|
+
cooldown:
|
|
15
|
+
default-days: 7
|
|
16
|
+
open-pull-requests-limit: 5
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
pull_request:
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
contents: read
|
|
9
|
+
|
|
10
|
+
concurrency:
|
|
11
|
+
group: ci-${{ github.workflow }}-${{ github.ref }}
|
|
12
|
+
cancel-in-progress: true
|
|
13
|
+
|
|
14
|
+
jobs:
|
|
15
|
+
test:
|
|
16
|
+
runs-on: ubuntu-latest
|
|
17
|
+
timeout-minutes: 30
|
|
18
|
+
strategy:
|
|
19
|
+
matrix:
|
|
20
|
+
python-version: ["3.11", "3.12", "3.13"]
|
|
21
|
+
steps:
|
|
22
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
23
|
+
with:
|
|
24
|
+
persist-credentials: false
|
|
25
|
+
- uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
|
26
|
+
with:
|
|
27
|
+
python-version: ${{ matrix.python-version }}
|
|
28
|
+
version: "0.11.18"
|
|
29
|
+
enable-cache: true
|
|
30
|
+
cache-dependency-glob: uv.lock
|
|
31
|
+
- run: uv sync --frozen --extra dev --extra onnx --group action-build
|
|
32
|
+
- run: uv run --frozen ruff check .
|
|
33
|
+
- run: uv run --frozen mypy src
|
|
34
|
+
- run: uv run --frozen pytest --cov=merriv --cov-report=term-missing --cov-fail-under=91
|
|
35
|
+
- run: uv run --frozen python -m pip_audit --local --skip-editable
|
|
36
|
+
- run: uv pip check
|
|
37
|
+
- if: matrix.python-version == '3.13'
|
|
38
|
+
shell: bash
|
|
39
|
+
run: |
|
|
40
|
+
uv run --frozen merriv schema export schemas/mcr-0.4
|
|
41
|
+
git diff --exit-code -- schemas/mcr-0.4
|
|
42
|
+
test -z "$(git status --porcelain --untracked-files=all -- schemas/mcr-0.4)"
|
|
43
|
+
uv run --frozen python tools/verify_regression_corpus.py
|
|
44
|
+
uv run --frozen merriv conformance producer examples/mcr_conformance
|
|
45
|
+
- if: matrix.python-version == '3.13'
|
|
46
|
+
run: uv run --frozen python -m build --wheel --no-isolation --outdir wheelhouse
|
|
47
|
+
|
|
48
|
+
action-smoke:
|
|
49
|
+
runs-on: ubuntu-latest
|
|
50
|
+
timeout-minutes: 20
|
|
51
|
+
steps:
|
|
52
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
53
|
+
with:
|
|
54
|
+
persist-credentials: false
|
|
55
|
+
- name: Run the repository's composite action
|
|
56
|
+
id: gate
|
|
57
|
+
continue-on-error: true
|
|
58
|
+
uses: ./
|
|
59
|
+
with:
|
|
60
|
+
baseline: examples/recorded_compare/baseline.jsonl
|
|
61
|
+
candidate: examples/recorded_compare/candidate.jsonl
|
|
62
|
+
suite: examples/recorded_compare/suite.jsonl
|
|
63
|
+
policy: examples/recorded_compare/policy.yaml
|
|
64
|
+
output: runs/action-smoke
|
|
65
|
+
slice-key: frequency
|
|
66
|
+
resamples: "200"
|
|
67
|
+
artifact-name: action-smoke-${{ github.run_id }}
|
|
68
|
+
- name: Assert BLOCK semantics and portable bundle
|
|
69
|
+
if: always()
|
|
70
|
+
env:
|
|
71
|
+
MERRIV_ACTION_OUTCOME: ${{ steps.gate.outcome }}
|
|
72
|
+
MERRIV_ACTION_EXIT_CODE: ${{ steps.gate.outputs.exit-code }}
|
|
73
|
+
run: |
|
|
74
|
+
test "$MERRIV_ACTION_OUTCOME" = "failure"
|
|
75
|
+
test "$MERRIV_ACTION_EXIT_CODE" = "2"
|
|
76
|
+
test -f runs/action-smoke/mcr-report.json
|
|
77
|
+
test -f runs/action-smoke/evidence-manifest.json
|
|
78
|
+
test -f runs/action-smoke/release-plan.json
|
|
79
|
+
test -f runs/action-smoke/summary.md
|
|
80
|
+
test -f runs/action-smoke/junit.xml
|
|
81
|
+
test -f runs/action-smoke/results.sarif
|
|
82
|
+
merriv mcr verify runs/action-smoke --strict
|
|
83
|
+
- name: Verify cross-language content identity vectors
|
|
84
|
+
run: node examples/content_identity/verify_golden.mjs
|
|
85
|
+
|
|
86
|
+
rust-mcr-interop:
|
|
87
|
+
runs-on: ubuntu-latest
|
|
88
|
+
timeout-minutes: 20
|
|
89
|
+
steps:
|
|
90
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
91
|
+
with:
|
|
92
|
+
persist-credentials: false
|
|
93
|
+
- uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
|
94
|
+
with:
|
|
95
|
+
python-version: "3.11"
|
|
96
|
+
version: "0.11.18"
|
|
97
|
+
enable-cache: true
|
|
98
|
+
cache-dependency-glob: uv.lock
|
|
99
|
+
- name: Install the Python verifier and select the stable Rust toolchain
|
|
100
|
+
run: |
|
|
101
|
+
uv sync --frozen
|
|
102
|
+
rustup toolchain install stable --profile minimal --component rustfmt
|
|
103
|
+
rustup default stable
|
|
104
|
+
- name: Verify typed identity vectors in Python, Node, and Rust
|
|
105
|
+
run: |
|
|
106
|
+
uv run --frozen python examples/content_identity/generate_vectors.py --check
|
|
107
|
+
uv run --frozen python examples/content_identity/verify_golden.py
|
|
108
|
+
node examples/content_identity/verify_golden.mjs
|
|
109
|
+
cargo fmt --manifest-path reference/mcr-reference-rust/Cargo.toml -- --check
|
|
110
|
+
cargo test --locked --manifest-path reference/mcr-reference-rust/Cargo.toml
|
|
111
|
+
cargo run --locked --quiet --manifest-path reference/mcr-reference-rust/Cargo.toml -- vectors examples/content_identity/golden-vectors.json
|
|
112
|
+
cargo run --locked --quiet --manifest-path reference/mcr-reference-rust/Cargo.toml -- float-vectors examples/content_identity/float-vectors.json
|
|
113
|
+
- name: Verify bidirectional Python and Rust Model Change Report interoperability
|
|
114
|
+
run: |
|
|
115
|
+
uv run --frozen python examples/independent_producer/generate_bundle.py --check
|
|
116
|
+
uv run --frozen python tools/verify_rust_interop.py
|
|
117
|
+
|
|
118
|
+
reproducible-package:
|
|
119
|
+
runs-on: ubuntu-latest
|
|
120
|
+
timeout-minutes: 15
|
|
121
|
+
steps:
|
|
122
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
123
|
+
with:
|
|
124
|
+
persist-credentials: false
|
|
125
|
+
fetch-depth: 0
|
|
126
|
+
- uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
|
127
|
+
with:
|
|
128
|
+
python-version: "3.13"
|
|
129
|
+
version: "0.11.18"
|
|
130
|
+
enable-cache: true
|
|
131
|
+
cache-dependency-glob: uv.lock
|
|
132
|
+
- run: uv sync --frozen --extra dev --group action-build
|
|
133
|
+
- name: Build twice from the same source epoch
|
|
134
|
+
shell: bash
|
|
135
|
+
run: |
|
|
136
|
+
export SOURCE_DATE_EPOCH="$(git log -1 --format=%ct)"
|
|
137
|
+
reproducibility_root="${RUNNER_TEMP}/merriv-repro-${GITHUB_RUN_ID}-${GITHUB_RUN_ATTEMPT}"
|
|
138
|
+
mkdir -p "${reproducibility_root}/a" "${reproducibility_root}/b"
|
|
139
|
+
uv run --frozen python -m build --no-isolation --outdir "${reproducibility_root}/a"
|
|
140
|
+
uv run --frozen python -m build --no-isolation --outdir "${reproducibility_root}/b"
|
|
141
|
+
cmp "${reproducibility_root}"/a/*.whl "${reproducibility_root}"/b/*.whl
|
|
142
|
+
cmp "${reproducibility_root}"/a/*.tar.gz "${reproducibility_root}"/b/*.tar.gz
|
|
143
|
+
sha256sum "${reproducibility_root}"/a/* "${reproducibility_root}"/b/*
|
|
144
|
+
|
|
145
|
+
onnx-demo:
|
|
146
|
+
strategy:
|
|
147
|
+
fail-fast: false
|
|
148
|
+
matrix:
|
|
149
|
+
os: [ubuntu-latest, windows-latest]
|
|
150
|
+
runs-on: ${{ matrix.os }}
|
|
151
|
+
timeout-minutes: 30
|
|
152
|
+
steps:
|
|
153
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
154
|
+
with:
|
|
155
|
+
persist-credentials: false
|
|
156
|
+
- uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
|
157
|
+
with:
|
|
158
|
+
python-version: "3.11"
|
|
159
|
+
version: "0.11.18"
|
|
160
|
+
enable-cache: true
|
|
161
|
+
cache-dependency-glob: uv.lock
|
|
162
|
+
- run: uv sync --frozen --extra onnx-demo
|
|
163
|
+
- run: uv run --frozen python examples/onnx_quantization/run_demo.py --output runs/onnx-quantization
|
|
164
|
+
- run: uv run --frozen python tools/verify_onnx_demo.py runs/onnx-quantization
|
|
165
|
+
- run: uv run --frozen python examples/onnx_opset_upgrade/run_demo.py --output runs/onnx-opset-upgrade
|
|
166
|
+
- name: Upload platform-specific ONNX evidence
|
|
167
|
+
if: always()
|
|
168
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
169
|
+
with:
|
|
170
|
+
name: onnx-release-evidence-${{ matrix.os }}
|
|
171
|
+
path: |
|
|
172
|
+
runs/onnx-quantization
|
|
173
|
+
runs/onnx-opset-upgrade
|
|
174
|
+
if-no-files-found: error
|
|
175
|
+
retention-days: 14
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
name: Dependency review
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
|
|
6
|
+
permissions:
|
|
7
|
+
contents: read
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
dependency-review:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
timeout-minutes: 10
|
|
13
|
+
steps:
|
|
14
|
+
- name: Review dependency changes
|
|
15
|
+
uses: actions/dependency-review-action@a1d282b36b6f3519aa1f3fc636f609c47dddb294 # v5.0.0
|
|
16
|
+
with:
|
|
17
|
+
fail-on-severity: moderate
|
|
18
|
+
deny-licenses: GPL-2.0, GPL-3.0, AGPL-1.0, AGPL-3.0
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
name: NVIDIA vertical
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
|
|
6
|
+
permissions:
|
|
7
|
+
contents: read
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
modelopt-tensorrt:
|
|
11
|
+
runs-on: [self-hosted, windows, x64, nvidia-gpu]
|
|
12
|
+
timeout-minutes: 60
|
|
13
|
+
env:
|
|
14
|
+
UV_CACHE_DIR: .uv-cache-${{ github.run_id }}
|
|
15
|
+
UV_NO_PROGRESS: "1"
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
18
|
+
with:
|
|
19
|
+
persist-credentials: false
|
|
20
|
+
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
21
|
+
with:
|
|
22
|
+
python-version: "3.11"
|
|
23
|
+
- uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
|
24
|
+
with:
|
|
25
|
+
version: "0.11.18"
|
|
26
|
+
enable-cache: false
|
|
27
|
+
- name: Generate the fixed CPU suite
|
|
28
|
+
shell: pwsh
|
|
29
|
+
run: |
|
|
30
|
+
$env:UV_PROJECT_ENVIRONMENT = ".venv-suite"
|
|
31
|
+
uv sync --frozen --extra onnx-demo
|
|
32
|
+
.venv-suite/Scripts/python examples/onnx_quantization/run_demo.py --output runs/onnx-quantization
|
|
33
|
+
- name: Build PyTorch and ModelOpt artifacts
|
|
34
|
+
shell: pwsh
|
|
35
|
+
run: |
|
|
36
|
+
uv venv --python 3.11 .venv-modelopt
|
|
37
|
+
uv pip sync --python .venv-modelopt/Scripts/python.exe --require-hashes examples/nvidia_tensorrt_vertical/requirements-modelopt.lock
|
|
38
|
+
.venv-modelopt/Scripts/python examples/nvidia_tensorrt_vertical/build_artifacts.py --fixture examples/onnx_quantization/assets/digits-mlp-fp32.onnx.b64 --output runs/nvidia/artifact-inputs
|
|
39
|
+
- name: Execute TensorRT, Polygraphy, gate, and bisect
|
|
40
|
+
shell: pwsh
|
|
41
|
+
run: |
|
|
42
|
+
$env:UV_PROJECT_ENVIRONMENT = ".venv-tensorrt"
|
|
43
|
+
uv sync --frozen --extra onnx-demo
|
|
44
|
+
uv pip install --python .venv-tensorrt/Scripts/python.exe --no-deps --require-hashes -r examples/nvidia_tensorrt_vertical/requirements-tensorrt-cu125-windows.lock
|
|
45
|
+
.venv-tensorrt/Scripts/python examples/nvidia_tensorrt_vertical/run_vertical.py --artifacts runs/nvidia/artifact-inputs --suite runs/onnx-quantization/suite.jsonl --output runs/nvidia/live --polygraphy-command .venv-tensorrt/Scripts/polygraphy.exe
|
|
46
|
+
- name: Verify target receipt and every Model Change Report bundle
|
|
47
|
+
shell: pwsh
|
|
48
|
+
run: |
|
|
49
|
+
.venv-tensorrt/Scripts/python -c "import json,pathlib; p=json.loads(pathlib.Path('runs/nvidia/live/gpu-receipt.json').read_text()); assert p['first_bad_index'] == 2; assert [b['decision'] for b in p['builds']] == ['PASS','PASS','BLOCK','BLOCK']; assert all(b['backend_matched_cases'] == p['case_count'] for b in p['builds'])"
|
|
50
|
+
.venv-tensorrt/Scripts/merriv.exe mcr verify-target runs/nvidia/live
|
|
51
|
+
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
|
|
52
|
+
- name: Upload exact target evidence
|
|
53
|
+
if: always()
|
|
54
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
55
|
+
with:
|
|
56
|
+
name: nvidia-modelopt-tensorrt-${{ github.run_id }}
|
|
57
|
+
path: runs/nvidia
|
|
58
|
+
if-no-files-found: error
|
|
59
|
+
retention-days: 30
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
name: Build release artifacts
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "v*"
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
|
|
9
|
+
permissions:
|
|
10
|
+
contents: read
|
|
11
|
+
|
|
12
|
+
concurrency:
|
|
13
|
+
group: release-${{ github.ref }}
|
|
14
|
+
cancel-in-progress: false
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
build:
|
|
18
|
+
runs-on: ubuntu-latest
|
|
19
|
+
timeout-minutes: 20
|
|
20
|
+
steps:
|
|
21
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
22
|
+
with:
|
|
23
|
+
persist-credentials: false
|
|
24
|
+
- uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
|
25
|
+
with:
|
|
26
|
+
python-version: "3.13"
|
|
27
|
+
version: "0.11.18"
|
|
28
|
+
enable-cache: false
|
|
29
|
+
- name: Install the locked build frontend
|
|
30
|
+
run: uv sync --frozen --extra dev --group action-build
|
|
31
|
+
- name: Build wheel and source distribution
|
|
32
|
+
shell: bash
|
|
33
|
+
run: |
|
|
34
|
+
export SOURCE_DATE_EPOCH="$(git log -1 --format=%ct)"
|
|
35
|
+
uv run --frozen python -m build --no-isolation
|
|
36
|
+
- name: Verify wheel installation
|
|
37
|
+
run: |
|
|
38
|
+
uv venv release-smoke --python 3.13
|
|
39
|
+
uv pip install --python release-smoke/bin/python --require-hashes -r action-requirements.lock
|
|
40
|
+
uv pip install --python release-smoke/bin/python --no-deps dist/*.whl
|
|
41
|
+
release-smoke/bin/merriv --help
|
|
42
|
+
release-smoke/bin/python -c "import importlib.util, merriv; assert importlib.util.find_spec('m2' + 'riv') is None"
|
|
43
|
+
legacy_command="m2""riv"
|
|
44
|
+
test ! -e "release-smoke/bin/${legacy_command}"
|
|
45
|
+
- name: Generate SPDX SBOM
|
|
46
|
+
uses: anchore/sbom-action@e22c389904149dbc22b58101806040fa8d37a610 # v0.24.0
|
|
47
|
+
with:
|
|
48
|
+
path: dist
|
|
49
|
+
format: spdx-json
|
|
50
|
+
output-file: dist/merriv.spdx.json
|
|
51
|
+
upload-artifact: false
|
|
52
|
+
upload-release-assets: false
|
|
53
|
+
- name: Write SHA-256 checksums
|
|
54
|
+
run: cd dist && sha256sum *.whl *.tar.gz *.spdx.json > SHA256SUMS
|
|
55
|
+
- name: Upload release bundle
|
|
56
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
57
|
+
with:
|
|
58
|
+
name: merriv-distributions-${{ github.ref_name }}
|
|
59
|
+
path: dist/*
|
|
60
|
+
if-no-files-found: error
|
|
61
|
+
retention-days: 30
|
|
62
|
+
|
|
63
|
+
attest:
|
|
64
|
+
needs: build
|
|
65
|
+
runs-on: ubuntu-latest
|
|
66
|
+
timeout-minutes: 10
|
|
67
|
+
permissions:
|
|
68
|
+
attestations: write
|
|
69
|
+
contents: read
|
|
70
|
+
id-token: write
|
|
71
|
+
steps:
|
|
72
|
+
- name: Download release bundle as inert data
|
|
73
|
+
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
74
|
+
with:
|
|
75
|
+
name: merriv-distributions-${{ github.ref_name }}
|
|
76
|
+
path: dist
|
|
77
|
+
- name: Attest release files
|
|
78
|
+
uses: actions/attest@1e69f48acb82d1966a394da916b4c1698aa569d6 # v4.2.2
|
|
79
|
+
with:
|
|
80
|
+
subject-path: dist/*
|
|
81
|
+
|
|
82
|
+
publish:
|
|
83
|
+
needs: [build, attest]
|
|
84
|
+
if: startsWith(github.ref, 'refs/tags/v') && vars.MERRIV_BRAND_CLEARED == 'true'
|
|
85
|
+
runs-on: ubuntu-latest
|
|
86
|
+
timeout-minutes: 10
|
|
87
|
+
environment:
|
|
88
|
+
name: pypi
|
|
89
|
+
url: https://pypi.org/p/merriv
|
|
90
|
+
permissions:
|
|
91
|
+
contents: read
|
|
92
|
+
id-token: write
|
|
93
|
+
steps:
|
|
94
|
+
- name: Download attested distributions
|
|
95
|
+
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
96
|
+
with:
|
|
97
|
+
name: merriv-distributions-${{ github.ref_name }}
|
|
98
|
+
path: dist
|
|
99
|
+
- name: Isolate package files from checksums and SBOM
|
|
100
|
+
run: |
|
|
101
|
+
mkdir publish-dist
|
|
102
|
+
cp dist/*.whl dist/*.tar.gz publish-dist/
|
|
103
|
+
- name: Publish with PyPI Trusted Publishing
|
|
104
|
+
uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # release/v1
|
|
105
|
+
with:
|
|
106
|
+
packages-dir: publish-dist
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
name: OpenSSF Scorecard
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
schedule:
|
|
7
|
+
- cron: "30 1 * * 6"
|
|
8
|
+
|
|
9
|
+
permissions: read-all
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
analysis:
|
|
13
|
+
name: Scorecard analysis
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
timeout-minutes: 20
|
|
16
|
+
permissions:
|
|
17
|
+
security-events: write
|
|
18
|
+
id-token: write
|
|
19
|
+
steps:
|
|
20
|
+
- name: Checkout without persisted credentials
|
|
21
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
22
|
+
with:
|
|
23
|
+
persist-credentials: false
|
|
24
|
+
- name: Run OpenSSF Scorecard
|
|
25
|
+
uses: ossf/scorecard-action@2d1146689b8cda280b9bc96326124645441f03bc # v2.4.4
|
|
26
|
+
with:
|
|
27
|
+
results_file: results.sarif
|
|
28
|
+
results_format: sarif
|
|
29
|
+
publish_results: true
|
|
30
|
+
- name: Retain the exact SARIF result
|
|
31
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
32
|
+
with:
|
|
33
|
+
name: openssf-scorecard-sarif
|
|
34
|
+
path: results.sarif
|
|
35
|
+
retention-days: 5
|
|
36
|
+
- name: Publish findings to code scanning
|
|
37
|
+
uses: github/codeql-action/upload-sarif@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4.37.8
|
|
38
|
+
with:
|
|
39
|
+
sarif_file: results.sarif
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
__pycache__/
|
|
2
|
+
*.py[cod]
|
|
3
|
+
*.egg-info/
|
|
4
|
+
.DS_Store
|
|
5
|
+
Thumbs.db
|
|
6
|
+
.idea/
|
|
7
|
+
.vscode/
|
|
8
|
+
.env
|
|
9
|
+
.env.*
|
|
10
|
+
!.env.example
|
|
11
|
+
.coverage
|
|
12
|
+
coverage.xml
|
|
13
|
+
htmlcov/
|
|
14
|
+
.mypy_cache/
|
|
15
|
+
.pytest_cache/
|
|
16
|
+
.ruff_cache/
|
|
17
|
+
.hypothesis/
|
|
18
|
+
.nox/
|
|
19
|
+
.tox/
|
|
20
|
+
.venv/
|
|
21
|
+
node_modules/
|
|
22
|
+
build/
|
|
23
|
+
target/
|
|
24
|
+
dist/
|
|
25
|
+
runs/
|
|
26
|
+
tmp/
|
|
27
|
+
output/
|
|
28
|
+
*.log
|
|
29
|
+
*.whl
|
|
30
|
+
*.tar.gz
|
|
31
|
+
*.zip
|
|
32
|
+
*.7z
|
|
33
|
+
*.pdf
|
|
34
|
+
*.ppt
|
|
35
|
+
*.pptx
|
|
36
|
+
*.onnx
|
|
37
|
+
*.engine
|
|
38
|
+
*.plan
|
|
39
|
+
*.pt
|
|
40
|
+
*.pth
|
|
41
|
+
*.safetensors
|
|
42
|
+
*.pem
|
|
43
|
+
*.key
|
|
44
|
+
*.p12
|
|
45
|
+
*.pfx
|