modelaudit 0.2.36__tar.gz → 0.2.38__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.
- modelaudit-0.2.38/.github/PULL_REQUEST_TEMPLATE.md +17 -0
- modelaudit-0.2.38/.github/workflows/README.md +17 -0
- modelaudit-0.2.38/.github/workflows/codeql.yml +63 -0
- modelaudit-0.2.38/.github/workflows/docker-image-test.yml +200 -0
- modelaudit-0.2.38/.github/workflows/docker-publish.yml +70 -0
- modelaudit-0.2.38/.github/workflows/docs-check.yml +75 -0
- modelaudit-0.2.38/.github/workflows/nightly.yml +81 -0
- modelaudit-0.2.38/.github/workflows/perf.yml +215 -0
- modelaudit-0.2.38/.github/workflows/release-please.yml +771 -0
- modelaudit-0.2.38/.github/workflows/test.yml +1103 -0
- modelaudit-0.2.38/.gitignore +161 -0
- modelaudit-0.2.38/.release-please-manifest.json +4 -0
- modelaudit-0.2.38/AGENTS.md +210 -0
- modelaudit-0.2.38/CHANGELOG.md +1395 -0
- modelaudit-0.2.38/CONTRIBUTING.md +289 -0
- modelaudit-0.2.38/Dockerfile +49 -0
- modelaudit-0.2.38/Dockerfile.full +63 -0
- modelaudit-0.2.38/Dockerfile.tensorflow +32 -0
- modelaudit-0.2.38/MAINTAINERS.md +33 -0
- modelaudit-0.2.38/PKG-INFO +410 -0
- modelaudit-0.2.38/README.md +286 -0
- modelaudit-0.2.38/RULES.md +210 -0
- modelaudit-0.2.38/SECURITY.md +180 -0
- modelaudit-0.2.38/THIRD_PARTY_NOTICES.md +84 -0
- modelaudit-0.2.38/docs/agents/architecture.md +114 -0
- modelaudit-0.2.38/docs/agents/dependencies.md +155 -0
- modelaudit-0.2.38/docs/agents/new-scanner-quickstart.md +131 -0
- modelaudit-0.2.38/docs/agents/picklescan-package-split.md +133 -0
- modelaudit-0.2.38/docs/agents/release-process.md +91 -0
- modelaudit-0.2.38/docs/maintainers/cve-process.md +92 -0
- modelaudit-0.2.38/docs/maintainers/scanner-cve-coverage.md +49 -0
- modelaudit-0.2.38/docs/security/threat-model.md +101 -0
- modelaudit-0.2.38/docs/user/compatibility-matrix.md +55 -0
- modelaudit-0.2.38/docs/user/offline-air-gapped.md +81 -0
- modelaudit-0.2.38/docs/user/scanner-selection.md +51 -0
- modelaudit-0.2.38/docs/user/security-model.md +67 -0
- modelaudit-0.2.38/modelaudit/analysis/__init__.py +69 -0
- modelaudit-0.2.38/modelaudit/analysis/entropy_analyzer.py +237 -0
- modelaudit-0.2.38/modelaudit/analysis/integrated_analyzer.py +395 -0
- modelaudit-0.2.38/modelaudit/auth/config.py +375 -0
- modelaudit-0.2.38/modelaudit/cache/cache_policy.py +64 -0
- modelaudit-0.2.38/modelaudit/cli.py +3583 -0
- modelaudit-0.2.38/modelaudit/config/explanations.py +1333 -0
- modelaudit-0.2.38/modelaudit/core.py +1394 -0
- modelaudit-0.2.38/modelaudit/core_results.py +523 -0
- modelaudit-0.2.38/modelaudit/detectors/network_comm.py +1023 -0
- modelaudit-0.2.38/modelaudit/detectors/suspicious_symbols.py +1206 -0
- modelaudit-0.2.38/modelaudit/integrations/jfrog.py +176 -0
- modelaudit-0.2.38/modelaudit/integrations/license_checker.py +795 -0
- modelaudit-0.2.38/modelaudit/integrations/sarif_formatter.py +447 -0
- modelaudit-0.2.38/modelaudit/metadata_extractor.py +144 -0
- modelaudit-0.2.38/modelaudit/models.py +910 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/framework/allocation_description_pb2.py +30 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/framework/api_def_pb2.py +48 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/framework/attr_value_pb2.py +58 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/framework/cost_graph_pb2.py +54 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/framework/cpp_shape_inference_pb2.py +48 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/framework/dataset_metadata_pb2.py +30 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/framework/dataset_options_pb2.py +56 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/framework/dataset_pb2.py +46 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/framework/device_attributes_pb2.py +36 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/framework/full_type_pb2.py +32 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/framework/function_pb2.py +74 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/framework/graph_debug_info_pb2.py +52 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/framework/graph_pb2.py +46 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/framework/graph_transfer_info_pb2.py +54 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/framework/kernel_def_pb2.py +42 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/framework/log_memory_pb2.py +48 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/framework/model_pb2.py +44 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/framework/node_def_pb2.py +46 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/framework/op_def_pb2.py +52 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/framework/optimized_function_graph_pb2.py +45 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/framework/reader_base_pb2.py +30 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/framework/resource_handle_pb2.py +42 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/framework/step_stats_pb2.py +62 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/framework/tensor_description_pb2.py +42 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/framework/tensor_pb2.py +64 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/framework/tensor_shape_pb2.py +32 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/framework/tensor_slice_pb2.py +32 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/framework/types_pb2.py +32 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/framework/variable_pb2.py +36 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/framework/versions_pb2.py +30 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/protobuf/cluster_pb2.py +36 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/protobuf/composite_tensor_variant_pb2.py +38 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/protobuf/control_flow_pb2.py +40 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/protobuf/core_platform_payloads_pb2.py +32 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/protobuf/critical_section_pb2.py +32 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/protobuf/data_service_pb2.py +42 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/protobuf/debug_event_pb2.py +60 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/protobuf/debug_pb2.py +36 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/protobuf/device_filters_pb2.py +38 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/protobuf/device_properties_pb2.py +36 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/protobuf/fingerprint_pb2.py +38 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/protobuf/meta_graph_pb2.py +106 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/protobuf/named_tensor_pb2.py +38 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/protobuf/remote_tensor_handle_pb2.py +42 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/protobuf/rewriter_config_pb2.py +58 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/protobuf/saved_model_pb2.py +38 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/protobuf/saved_object_graph_pb2.py +86 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/protobuf/saver_pb2.py +32 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/protobuf/service_config_pb2.py +40 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/protobuf/snapshot_pb2.py +50 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/protobuf/struct_pb2.py +66 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/protobuf/tensor_bundle_pb2.py +48 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/protobuf/trackable_object_graph_pb2.py +48 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/protobuf/transport_options_pb2.py +30 -0
- modelaudit-0.2.38/modelaudit/protos/tensorflow/core/protobuf/verifier_config_pb2.py +32 -0
- modelaudit-0.2.38/modelaudit/rule_catalog.py +809 -0
- modelaudit-0.2.38/modelaudit/rules.py +124 -0
- modelaudit-0.2.38/modelaudit/scanner_registry_metadata.py +569 -0
- modelaudit-0.2.38/modelaudit/scanner_results.py +455 -0
- modelaudit-0.2.38/modelaudit/scanner_selection.py +368 -0
- modelaudit-0.2.38/modelaudit/scanners/__init__.py +489 -0
- modelaudit-0.2.38/modelaudit/scanners/_evidence_redaction.py +97 -0
- modelaudit-0.2.38/modelaudit/scanners/archive_dispatch.py +148 -0
- modelaudit-0.2.38/modelaudit/scanners/archive_member_security.py +655 -0
- modelaudit-0.2.38/modelaudit/scanners/base.py +1428 -0
- modelaudit-0.2.38/modelaudit/scanners/catboost_scanner.py +555 -0
- modelaudit-0.2.38/modelaudit/scanners/executorch_scanner.py +196 -0
- modelaudit-0.2.38/modelaudit/scanners/flax_msgpack_scanner.py +1112 -0
- modelaudit-0.2.38/modelaudit/scanners/gguf_scanner.py +712 -0
- modelaudit-0.2.38/modelaudit/scanners/jax_checkpoint_scanner.py +1091 -0
- modelaudit-0.2.38/modelaudit/scanners/jinja2_template_scanner.py +923 -0
- modelaudit-0.2.38/modelaudit/scanners/joblib_scanner.py +617 -0
- modelaudit-0.2.38/modelaudit/scanners/keras_h5_scanner.py +1159 -0
- modelaudit-0.2.38/modelaudit/scanners/keras_utils.py +392 -0
- modelaudit-0.2.38/modelaudit/scanners/keras_zip_scanner.py +1977 -0
- modelaudit-0.2.38/modelaudit/scanners/lightgbm_scanner.py +458 -0
- modelaudit-0.2.38/modelaudit/scanners/llamafile_scanner.py +450 -0
- modelaudit-0.2.38/modelaudit/scanners/manifest_scanner.py +1155 -0
- modelaudit-0.2.38/modelaudit/scanners/metadata_scanner.py +360 -0
- modelaudit-0.2.38/modelaudit/scanners/mxnet_scanner.py +760 -0
- modelaudit-0.2.38/modelaudit/scanners/nemo_scanner.py +1026 -0
- modelaudit-0.2.38/modelaudit/scanners/numpy_scanner.py +648 -0
- modelaudit-0.2.38/modelaudit/scanners/onnx_scanner.py +979 -0
- modelaudit-0.2.38/modelaudit/scanners/openvino_scanner.py +335 -0
- modelaudit-0.2.38/modelaudit/scanners/paddle_scanner.py +141 -0
- modelaudit-0.2.38/modelaudit/scanners/pickle_scanner.py +2436 -0
- modelaudit-0.2.38/modelaudit/scanners/picklescan_adapter.py +783 -0
- modelaudit-0.2.38/modelaudit/scanners/pmml_scanner.py +530 -0
- modelaudit-0.2.38/modelaudit/scanners/pytorch_zip_scanner.py +2621 -0
- modelaudit-0.2.38/modelaudit/scanners/r_serialized_scanner.py +716 -0
- modelaudit-0.2.38/modelaudit/scanners/rar_scanner.py +67 -0
- modelaudit-0.2.38/modelaudit/scanners/rknn_scanner.py +389 -0
- modelaudit-0.2.38/modelaudit/scanners/rule_mapper.py +346 -0
- modelaudit-0.2.38/modelaudit/scanners/safetensors_scanner.py +805 -0
- modelaudit-0.2.38/modelaudit/scanners/sevenzip_scanner.py +937 -0
- modelaudit-0.2.38/modelaudit/scanners/skops_scanner.py +558 -0
- modelaudit-0.2.38/modelaudit/scanners/tar_scanner.py +640 -0
- modelaudit-0.2.38/modelaudit/scanners/tf_savedmodel_scanner.py +1443 -0
- modelaudit-0.2.38/modelaudit/scanners/torchserve_mar_scanner.py +2062 -0
- modelaudit-0.2.38/modelaudit/scanners/weight_distribution_scanner.py +864 -0
- modelaudit-0.2.38/modelaudit/scanners/xgboost_scanner.py +1050 -0
- modelaudit-0.2.38/modelaudit/scanners/zip_scanner.py +801 -0
- modelaudit-0.2.38/modelaudit/telemetry.py +1046 -0
- modelaudit-0.2.38/modelaudit/utils/file/detection.py +1783 -0
- modelaudit-0.2.38/modelaudit/utils/file/filtering.py +393 -0
- modelaudit-0.2.38/modelaudit/utils/file/streaming.py +288 -0
- modelaudit-0.2.38/modelaudit/utils/helpers/auto_defaults.py +283 -0
- modelaudit-0.2.38/modelaudit/utils/helpers/cache_decorator.py +205 -0
- modelaudit-0.2.38/modelaudit/utils/helpers/result_conversion.py +190 -0
- modelaudit-0.2.38/modelaudit/utils/helpers/retry.py +200 -0
- modelaudit-0.2.38/modelaudit/utils/helpers/types.py +182 -0
- modelaudit-0.2.38/modelaudit/utils/sources/cloud_storage.py +897 -0
- modelaudit-0.2.38/modelaudit/utils/sources/dvc.py +84 -0
- modelaudit-0.2.38/modelaudit/utils/sources/huggingface.py +485 -0
- modelaudit-0.2.38/modelaudit/utils/sources/huggingface_paths.py +214 -0
- modelaudit-0.2.38/modelaudit/utils/sources/jfrog.py +696 -0
- modelaudit-0.2.38/package-lock.json +27 -0
- modelaudit-0.2.38/packages/modelaudit-picklescan/CHANGELOG.md +88 -0
- modelaudit-0.2.38/packages/modelaudit-picklescan/Cargo.lock +133 -0
- modelaudit-0.2.38/packages/modelaudit-picklescan/Cargo.toml +22 -0
- modelaudit-0.2.38/packages/modelaudit-picklescan/README.md +79 -0
- modelaudit-0.2.38/packages/modelaudit-picklescan/pyproject.toml +103 -0
- modelaudit-0.2.38/packages/modelaudit-picklescan/rust/README.md +11 -0
- modelaudit-0.2.38/packages/modelaudit-picklescan/rust/src/expansion.rs +309 -0
- modelaudit-0.2.38/packages/modelaudit-picklescan/rust/src/lib.rs +21 -0
- modelaudit-0.2.38/packages/modelaudit-picklescan/rust/src/nested.rs +1223 -0
- modelaudit-0.2.38/packages/modelaudit-picklescan/rust/src/nested_surface.rs +143 -0
- modelaudit-0.2.38/packages/modelaudit-picklescan/rust/src/opcode.rs +849 -0
- modelaudit-0.2.38/packages/modelaudit-picklescan/rust/src/options.rs +100 -0
- modelaudit-0.2.38/packages/modelaudit-picklescan/rust/src/policy.rs +276 -0
- modelaudit-0.2.38/packages/modelaudit-picklescan/rust/src/post_budget.rs +616 -0
- modelaudit-0.2.38/packages/modelaudit-picklescan/rust/src/pybridge.rs +34 -0
- modelaudit-0.2.38/packages/modelaudit-picklescan/rust/src/report.rs +286 -0
- modelaudit-0.2.38/packages/modelaudit-picklescan/rust/src/stack.rs +236 -0
- modelaudit-0.2.38/packages/modelaudit-picklescan/rust/src/state.rs +4002 -0
- modelaudit-0.2.38/packages/modelaudit-picklescan/rust/src/strings.rs +896 -0
- modelaudit-0.2.38/packages/modelaudit-picklescan/rust/src/strings_policy.rs +79 -0
- modelaudit-0.2.38/packages/modelaudit-picklescan/src/modelaudit_picklescan/api.py +1052 -0
- modelaudit-0.2.38/packages/modelaudit-picklescan/src/modelaudit_picklescan/options.py +102 -0
- modelaudit-0.2.38/packages/modelaudit-picklescan/tests/parity_corpus.py +192 -0
- modelaudit-0.2.38/packages/modelaudit-picklescan/tests/test_adversarial_pickle_oracle.py +302 -0
- modelaudit-0.2.38/packages/modelaudit-picklescan/tests/test_api.py +2729 -0
- modelaudit-0.2.38/packages/modelaudit-picklescan/tests/test_native_interface.py +48 -0
- modelaudit-0.2.38/packages/modelaudit-picklescan/tests/test_options.py +55 -0
- modelaudit-0.2.38/packages/modelaudit-picklescan/tests/test_report.py +167 -0
- modelaudit-0.2.38/packages/modelaudit-picklescan/tests/test_rust_engine.py +367 -0
- modelaudit-0.2.38/pyproject.toml +402 -0
- modelaudit-0.2.38/release-please-config.json +43 -0
- modelaudit-0.2.38/scripts/README.md +39 -0
- modelaudit-0.2.38/scripts/check_circular_imports.py +115 -0
- modelaudit-0.2.38/scripts/compile_tensorflow_protos.sh +197 -0
- modelaudit-0.2.38/scripts/large_pickle_corpus_qa.py +1955 -0
- modelaudit-0.2.38/scripts/profile_scan.py +147 -0
- modelaudit-0.2.38/tests/assets/generators/generate_safetensors_assets.py +88 -0
- modelaudit-0.2.38/tests/assets/samples/jinja2/standalone/malicious_subprocess.template +6 -0
- modelaudit-0.2.38/tests/assets/samples/safetensors/malicious_import.safetensors +0 -0
- modelaudit-0.2.38/tests/assets/samples/safetensors/safe_model.safetensors +0 -0
- modelaudit-0.2.38/tests/benchmarks/test_picklescan_benchmarks.py +247 -0
- modelaudit-0.2.38/tests/benchmarks/test_scan_benchmarks.py +240 -0
- modelaudit-0.2.38/tests/cache/test_cache_correctness.py +652 -0
- modelaudit-0.2.38/tests/conftest.py +624 -0
- modelaudit-0.2.38/tests/detectors/test_network_comm_detector.py +569 -0
- modelaudit-0.2.38/tests/detectors/test_suspicious_symbols.py +530 -0
- modelaudit-0.2.38/tests/helpers/__init__.py +50 -0
- modelaudit-0.2.38/tests/helpers/file_creators.py +237 -0
- modelaudit-0.2.38/tests/integrations/test_jfrog.py +653 -0
- modelaudit-0.2.38/tests/integrations/test_jfrog_integration.py +425 -0
- modelaudit-0.2.38/tests/integrations/test_sarif_formatter.py +566 -0
- modelaudit-0.2.38/tests/scanners/test_base_scanner.py +1376 -0
- modelaudit-0.2.38/tests/scanners/test_catboost_scanner.py +201 -0
- modelaudit-0.2.38/tests/scanners/test_executorch_scanner.py +145 -0
- modelaudit-0.2.38/tests/scanners/test_flax_msgpack_scanner.py +635 -0
- modelaudit-0.2.38/tests/scanners/test_gguf_scanner.py +817 -0
- modelaudit-0.2.38/tests/scanners/test_jinja2_template_scanner.py +771 -0
- modelaudit-0.2.38/tests/scanners/test_joblib_scanner.py +78 -0
- modelaudit-0.2.38/tests/scanners/test_joblib_scanner_codecs.py +196 -0
- modelaudit-0.2.38/tests/scanners/test_keras_h5_scanner.py +1755 -0
- modelaudit-0.2.38/tests/scanners/test_keras_zip_scanner.py +3162 -0
- modelaudit-0.2.38/tests/scanners/test_lightgbm_scanner.py +176 -0
- modelaudit-0.2.38/tests/scanners/test_llamafile_scanner.py +210 -0
- modelaudit-0.2.38/tests/scanners/test_manifest_scanner.py +1034 -0
- modelaudit-0.2.38/tests/scanners/test_metadata_scanner.py +327 -0
- modelaudit-0.2.38/tests/scanners/test_mxnet_scanner.py +383 -0
- modelaudit-0.2.38/tests/scanners/test_nemo_scanner.py +983 -0
- modelaudit-0.2.38/tests/scanners/test_numpy_scanner.py +450 -0
- modelaudit-0.2.38/tests/scanners/test_onnx_scanner.py +934 -0
- modelaudit-0.2.38/tests/scanners/test_openvino_scanner.py +400 -0
- modelaudit-0.2.38/tests/scanners/test_pickle_scanner.py +1474 -0
- modelaudit-0.2.38/tests/scanners/test_picklescan_adapter.py +1472 -0
- modelaudit-0.2.38/tests/scanners/test_pmml_scanner.py +745 -0
- modelaudit-0.2.38/tests/scanners/test_pytorch_binary_scanner.py +322 -0
- modelaudit-0.2.38/tests/scanners/test_pytorch_zip_scanner.py +2361 -0
- modelaudit-0.2.38/tests/scanners/test_r_serialized_scanner.py +307 -0
- modelaudit-0.2.38/tests/scanners/test_rknn_scanner.py +139 -0
- modelaudit-0.2.38/tests/scanners/test_rule_mapper.py +72 -0
- modelaudit-0.2.38/tests/scanners/test_safetensors_scanner.py +621 -0
- modelaudit-0.2.38/tests/scanners/test_scanner_registry.py +614 -0
- modelaudit-0.2.38/tests/scanners/test_sevenzip_scanner.py +1898 -0
- modelaudit-0.2.38/tests/scanners/test_skops_scanner.py +784 -0
- modelaudit-0.2.38/tests/scanners/test_tar_scanner.py +1177 -0
- modelaudit-0.2.38/tests/scanners/test_tflite_scanner.py +372 -0
- modelaudit-0.2.38/tests/scanners/test_torchserve_mar_scanner.py +2143 -0
- modelaudit-0.2.38/tests/scanners/test_weight_distribution_scanner.py +782 -0
- modelaudit-0.2.38/tests/scanners/test_xgboost_scanner.py +1115 -0
- modelaudit-0.2.38/tests/scanners/test_zip_scanner.py +1899 -0
- modelaudit-0.2.38/tests/scripts/test_large_pickle_corpus_qa.py +303 -0
- modelaudit-0.2.38/tests/test_cli.py +2490 -0
- modelaudit-0.2.38/tests/test_committed_fixture_hygiene.py +158 -0
- modelaudit-0.2.38/tests/test_core.py +919 -0
- modelaudit-0.2.38/tests/test_dill_joblib_enhanced.py +67 -0
- modelaudit-0.2.38/tests/test_directory_file_filtering.py +470 -0
- modelaudit-0.2.38/tests/test_exit_codes.py +476 -0
- modelaudit-0.2.38/tests/test_integration.py +392 -0
- modelaudit-0.2.38/tests/test_jit_script_integration.py +194 -0
- modelaudit-0.2.38/tests/test_lazy_loading.py +477 -0
- modelaudit-0.2.38/tests/test_metadata_extractor.py +706 -0
- modelaudit-0.2.38/tests/test_models.py +822 -0
- modelaudit-0.2.38/tests/test_nested_pickle_integration.py +436 -0
- modelaudit-0.2.38/tests/test_network_comm_integration.py +303 -0
- modelaudit-0.2.38/tests/test_pickle_context_filtering.py +48 -0
- modelaudit-0.2.38/tests/test_regression_corpus.py +131 -0
- modelaudit-0.2.38/tests/test_regular_scan_hash.py +295 -0
- modelaudit-0.2.38/tests/test_rules.py +495 -0
- modelaudit-0.2.38/tests/test_scanner_selection.py +402 -0
- modelaudit-0.2.38/tests/test_security_enhancements.py +495 -0
- modelaudit-0.2.38/tests/test_streaming_scan.py +943 -0
- modelaudit-0.2.38/tests/test_telemetry.py +728 -0
- modelaudit-0.2.38/tests/test_telemetry_decoupling.py +498 -0
- modelaudit-0.2.38/tests/utils/file/test_advanced_size_limits.py +168 -0
- modelaudit-0.2.38/tests/utils/file/test_file_filter.py +345 -0
- modelaudit-0.2.38/tests/utils/file/test_file_type_validation_integration.py +457 -0
- modelaudit-0.2.38/tests/utils/file/test_filetype.py +1160 -0
- modelaudit-0.2.38/tests/utils/file/test_streaming_analysis.py +250 -0
- modelaudit-0.2.38/tests/utils/helpers/test_py_compile_improvements.py +326 -0
- modelaudit-0.2.38/tests/utils/sources/test_cloud_storage.py +858 -0
- modelaudit-0.2.38/tests/utils/sources/test_dvc_integration.py +336 -0
- modelaudit-0.2.38/tests/utils/sources/test_huggingface.py +838 -0
- modelaudit-0.2.38/tests/utils/test_result_conversion.py +348 -0
- modelaudit-0.2.38/uv.lock +5308 -0
- modelaudit-0.2.36/.github/PULL_REQUEST_TEMPLATE.md +0 -17
- modelaudit-0.2.36/.github/workflows/README.md +0 -15
- modelaudit-0.2.36/.github/workflows/codeql.yml +0 -63
- modelaudit-0.2.36/.github/workflows/docker-image-test.yml +0 -191
- modelaudit-0.2.36/.github/workflows/docker-publish.yml +0 -70
- modelaudit-0.2.36/.github/workflows/docs-check.yml +0 -75
- modelaudit-0.2.36/.github/workflows/nightly.yml +0 -63
- modelaudit-0.2.36/.github/workflows/perf.yml +0 -196
- modelaudit-0.2.36/.github/workflows/release-please.yml +0 -538
- modelaudit-0.2.36/.github/workflows/test.yml +0 -975
- modelaudit-0.2.36/.gitignore +0 -158
- modelaudit-0.2.36/.release-please-manifest.json +0 -3
- modelaudit-0.2.36/AGENTS.md +0 -210
- modelaudit-0.2.36/CHANGELOG.md +0 -1257
- modelaudit-0.2.36/CONTRIBUTING.md +0 -277
- modelaudit-0.2.36/Dockerfile +0 -33
- modelaudit-0.2.36/Dockerfile.full +0 -41
- modelaudit-0.2.36/Dockerfile.tensorflow +0 -32
- modelaudit-0.2.36/MAINTAINERS.md +0 -33
- modelaudit-0.2.36/PKG-INFO +0 -378
- modelaudit-0.2.36/README.md +0 -255
- modelaudit-0.2.36/RULES.md +0 -216
- modelaudit-0.2.36/SECURITY.md +0 -178
- modelaudit-0.2.36/THIRD_PARTY_NOTICES.md +0 -84
- modelaudit-0.2.36/docs/agents/architecture.md +0 -111
- modelaudit-0.2.36/docs/agents/dependencies.md +0 -151
- modelaudit-0.2.36/docs/agents/new-scanner-quickstart.md +0 -120
- modelaudit-0.2.36/docs/agents/picklescan-package-split.md +0 -127
- modelaudit-0.2.36/docs/agents/release-process.md +0 -88
- modelaudit-0.2.36/docs/agents/repo-correctness-audit.md +0 -209
- modelaudit-0.2.36/docs/maintainers/cve-gap-pr-plan-2026-03-20.md +0 -66
- modelaudit-0.2.36/docs/maintainers/cve-process.md +0 -87
- modelaudit-0.2.36/docs/maintainers/format-gap-plans/coreml-mlmodel.md +0 -132
- modelaudit-0.2.36/docs/maintainers/format-gap-plans/mxnet-models.md +0 -120
- modelaudit-0.2.36/docs/maintainers/format-gap-plans/tensorflow-metagraph.md +0 -107
- modelaudit-0.2.36/docs/maintainers/format-gap-plans/torchserve-mar.md +0 -168
- modelaudit-0.2.36/docs/security/threat-model.md +0 -100
- modelaudit-0.2.36/docs/user/compatibility-matrix.md +0 -51
- modelaudit-0.2.36/docs/user/offline-air-gapped.md +0 -81
- modelaudit-0.2.36/docs/user/security-model.md +0 -59
- modelaudit-0.2.36/modelaudit/analysis/__init__.py +0 -61
- modelaudit-0.2.36/modelaudit/analysis/entropy_analyzer.py +0 -238
- modelaudit-0.2.36/modelaudit/analysis/integrated_analyzer.py +0 -397
- modelaudit-0.2.36/modelaudit/auth/config.py +0 -377
- modelaudit-0.2.36/modelaudit/cache/cache_policy.py +0 -61
- modelaudit-0.2.36/modelaudit/cli.py +0 -3377
- modelaudit-0.2.36/modelaudit/config/explanations.py +0 -1297
- modelaudit-0.2.36/modelaudit/core.py +0 -1222
- modelaudit-0.2.36/modelaudit/core_results.py +0 -499
- modelaudit-0.2.36/modelaudit/detectors/network_comm.py +0 -809
- modelaudit-0.2.36/modelaudit/detectors/suspicious_symbols.py +0 -1182
- modelaudit-0.2.36/modelaudit/integrations/jfrog.py +0 -164
- modelaudit-0.2.36/modelaudit/integrations/license_checker.py +0 -728
- modelaudit-0.2.36/modelaudit/integrations/sarif_formatter.py +0 -385
- modelaudit-0.2.36/modelaudit/metadata_extractor.py +0 -139
- modelaudit-0.2.36/modelaudit/models.py +0 -827
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/framework/allocation_description_pb2.py +0 -37
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/framework/api_def_pb2.py +0 -48
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/framework/attr_value_pb2.py +0 -56
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/framework/cost_graph_pb2.py +0 -53
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/framework/cpp_shape_inference_pb2.py +0 -46
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/framework/dataset_metadata_pb2.py +0 -37
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/framework/dataset_options_pb2.py +0 -56
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/framework/dataset_pb2.py +0 -44
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/framework/device_attributes_pb2.py +0 -43
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/framework/full_type_pb2.py +0 -39
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/framework/function_pb2.py +0 -72
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/framework/graph_debug_info_pb2.py +0 -59
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/framework/graph_pb2.py +0 -43
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/framework/graph_transfer_info_pb2.py +0 -54
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/framework/kernel_def_pb2.py +0 -42
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/framework/log_memory_pb2.py +0 -48
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/framework/model_pb2.py +0 -51
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/framework/node_def_pb2.py +0 -45
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/framework/op_def_pb2.py +0 -49
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/framework/optimized_function_graph_pb2.py +0 -44
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/framework/reader_base_pb2.py +0 -37
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/framework/resource_handle_pb2.py +0 -41
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/framework/step_stats_pb2.py +0 -61
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/framework/tensor_description_pb2.py +0 -40
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/framework/tensor_pb2.py +0 -62
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/framework/tensor_shape_pb2.py +0 -39
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/framework/tensor_slice_pb2.py +0 -39
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/framework/types_pb2.py +0 -39
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/framework/variable_pb2.py +0 -43
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/framework/versions_pb2.py +0 -37
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/protobuf/cluster_pb2.py +0 -43
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/protobuf/composite_tensor_variant_pb2.py +0 -38
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/protobuf/control_flow_pb2.py +0 -47
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/protobuf/core_platform_payloads_pb2.py +0 -39
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/protobuf/critical_section_pb2.py +0 -39
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/protobuf/data_service_pb2.py +0 -49
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/protobuf/debug_event_pb2.py +0 -59
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/protobuf/debug_pb2.py +0 -43
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/protobuf/device_filters_pb2.py +0 -45
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/protobuf/device_properties_pb2.py +0 -43
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/protobuf/fingerprint_pb2.py +0 -38
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/protobuf/meta_graph_pb2.py +0 -98
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/protobuf/named_tensor_pb2.py +0 -38
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/protobuf/remote_tensor_handle_pb2.py +0 -41
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/protobuf/rewriter_config_pb2.py +0 -57
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/protobuf/saved_model_pb2.py +0 -38
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/protobuf/saved_object_graph_pb2.py +0 -80
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/protobuf/saver_pb2.py +0 -39
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/protobuf/service_config_pb2.py +0 -40
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/protobuf/snapshot_pb2.py +0 -48
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/protobuf/struct_pb2.py +0 -64
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/protobuf/tensor_bundle_pb2.py +0 -45
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/protobuf/trackable_object_graph_pb2.py +0 -48
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/protobuf/transport_options_pb2.py +0 -37
- modelaudit-0.2.36/modelaudit/protos/tensorflow/core/protobuf/verifier_config_pb2.py +0 -39
- modelaudit-0.2.36/modelaudit/rule_catalog.py +0 -788
- modelaudit-0.2.36/modelaudit/rules.py +0 -115
- modelaudit-0.2.36/modelaudit/scanner_registry_metadata.py +0 -558
- modelaudit-0.2.36/modelaudit/scanner_results.py +0 -357
- modelaudit-0.2.36/modelaudit/scanners/__init__.py +0 -450
- modelaudit-0.2.36/modelaudit/scanners/archive_dispatch.py +0 -115
- modelaudit-0.2.36/modelaudit/scanners/archive_member_security.py +0 -26
- modelaudit-0.2.36/modelaudit/scanners/base.py +0 -1261
- modelaudit-0.2.36/modelaudit/scanners/catboost_scanner.py +0 -533
- modelaudit-0.2.36/modelaudit/scanners/executorch_scanner.py +0 -185
- modelaudit-0.2.36/modelaudit/scanners/flax_msgpack_scanner.py +0 -1080
- modelaudit-0.2.36/modelaudit/scanners/gguf_scanner.py +0 -680
- modelaudit-0.2.36/modelaudit/scanners/jax_checkpoint_scanner.py +0 -1092
- modelaudit-0.2.36/modelaudit/scanners/jinja2_template_scanner.py +0 -818
- modelaudit-0.2.36/modelaudit/scanners/joblib_scanner.py +0 -463
- modelaudit-0.2.36/modelaudit/scanners/keras_h5_scanner.py +0 -1142
- modelaudit-0.2.36/modelaudit/scanners/keras_utils.py +0 -388
- modelaudit-0.2.36/modelaudit/scanners/keras_zip_scanner.py +0 -1775
- modelaudit-0.2.36/modelaudit/scanners/lightgbm_scanner.py +0 -430
- modelaudit-0.2.36/modelaudit/scanners/llamafile_scanner.py +0 -445
- modelaudit-0.2.36/modelaudit/scanners/manifest_scanner.py +0 -1129
- modelaudit-0.2.36/modelaudit/scanners/metadata_scanner.py +0 -337
- modelaudit-0.2.36/modelaudit/scanners/mxnet_scanner.py +0 -677
- modelaudit-0.2.36/modelaudit/scanners/nemo_scanner.py +0 -451
- modelaudit-0.2.36/modelaudit/scanners/numpy_scanner.py +0 -583
- modelaudit-0.2.36/modelaudit/scanners/onnx_scanner.py +0 -842
- modelaudit-0.2.36/modelaudit/scanners/openvino_scanner.py +0 -263
- modelaudit-0.2.36/modelaudit/scanners/paddle_scanner.py +0 -144
- modelaudit-0.2.36/modelaudit/scanners/pickle_scanner.py +0 -8837
- modelaudit-0.2.36/modelaudit/scanners/pickle_support/__init__.py +0 -131
- modelaudit-0.2.36/modelaudit/scanners/pickle_support/opcode_stream.py +0 -763
- modelaudit-0.2.36/modelaudit/scanners/picklescan_adapter.py +0 -522
- modelaudit-0.2.36/modelaudit/scanners/pmml_scanner.py +0 -371
- modelaudit-0.2.36/modelaudit/scanners/pytorch_zip_scanner.py +0 -2007
- modelaudit-0.2.36/modelaudit/scanners/r_serialized_scanner.py +0 -696
- modelaudit-0.2.36/modelaudit/scanners/rknn_scanner.py +0 -390
- modelaudit-0.2.36/modelaudit/scanners/rule_mapper.py +0 -337
- modelaudit-0.2.36/modelaudit/scanners/safetensors_scanner.py +0 -812
- modelaudit-0.2.36/modelaudit/scanners/sevenzip_scanner.py +0 -909
- modelaudit-0.2.36/modelaudit/scanners/skops_scanner.py +0 -504
- modelaudit-0.2.36/modelaudit/scanners/tar_scanner.py +0 -626
- modelaudit-0.2.36/modelaudit/scanners/tf_savedmodel_scanner.py +0 -1447
- modelaudit-0.2.36/modelaudit/scanners/torchserve_mar_scanner.py +0 -2023
- modelaudit-0.2.36/modelaudit/scanners/weight_distribution_scanner.py +0 -867
- modelaudit-0.2.36/modelaudit/scanners/xgboost_scanner.py +0 -757
- modelaudit-0.2.36/modelaudit/scanners/zip_scanner.py +0 -641
- modelaudit-0.2.36/modelaudit/telemetry.py +0 -921
- modelaudit-0.2.36/modelaudit/utils/file/detection.py +0 -1391
- modelaudit-0.2.36/modelaudit/utils/file/filtering.py +0 -347
- modelaudit-0.2.36/modelaudit/utils/file/streaming.py +0 -288
- modelaudit-0.2.36/modelaudit/utils/helpers/auto_defaults.py +0 -283
- modelaudit-0.2.36/modelaudit/utils/helpers/cache_decorator.py +0 -201
- modelaudit-0.2.36/modelaudit/utils/helpers/result_conversion.py +0 -190
- modelaudit-0.2.36/modelaudit/utils/helpers/retry.py +0 -197
- modelaudit-0.2.36/modelaudit/utils/helpers/types.py +0 -182
- modelaudit-0.2.36/modelaudit/utils/sources/cloud_storage.py +0 -759
- modelaudit-0.2.36/modelaudit/utils/sources/dvc.py +0 -96
- modelaudit-0.2.36/modelaudit/utils/sources/huggingface.py +0 -458
- modelaudit-0.2.36/modelaudit/utils/sources/huggingface_paths.py +0 -135
- modelaudit-0.2.36/modelaudit/utils/sources/jfrog.py +0 -618
- modelaudit-0.2.36/package-lock.json +0 -27
- modelaudit-0.2.36/packages/modelaudit-picklescan/README.md +0 -63
- modelaudit-0.2.36/packages/modelaudit-picklescan/pyproject.toml +0 -104
- modelaudit-0.2.36/packages/modelaudit-picklescan/src/modelaudit_picklescan/api.py +0 -125
- modelaudit-0.2.36/packages/modelaudit-picklescan/src/modelaudit_picklescan/engine/__init__.py +0 -5
- modelaudit-0.2.36/packages/modelaudit-picklescan/src/modelaudit_picklescan/engine/nested.py +0 -126
- modelaudit-0.2.36/packages/modelaudit-picklescan/src/modelaudit_picklescan/engine/policy.py +0 -248
- modelaudit-0.2.36/packages/modelaudit-picklescan/src/modelaudit_picklescan/engine/scanner.py +0 -1111
- modelaudit-0.2.36/packages/modelaudit-picklescan/src/modelaudit_picklescan/engine/stream.py +0 -141
- modelaudit-0.2.36/packages/modelaudit-picklescan/src/modelaudit_picklescan/options.py +0 -74
- modelaudit-0.2.36/packages/modelaudit-picklescan/tests/test_api.py +0 -1030
- modelaudit-0.2.36/packages/modelaudit-picklescan/tests/test_options.py +0 -45
- modelaudit-0.2.36/packages/modelaudit-picklescan/tests/test_report.py +0 -145
- modelaudit-0.2.36/pyproject.toml +0 -401
- modelaudit-0.2.36/release-please-config.json +0 -22
- modelaudit-0.2.36/scripts/README.md +0 -35
- modelaudit-0.2.36/scripts/check_circular_imports.py +0 -121
- modelaudit-0.2.36/scripts/compare_pickle_scanners.py +0 -362
- modelaudit-0.2.36/scripts/compare_pickle_scanners_fixture_labels.json +0 -36
- modelaudit-0.2.36/scripts/compile_tensorflow_protos.sh +0 -154
- modelaudit-0.2.36/tests/assets/generators/generate_safetensors_assets.py +0 -115
- modelaudit-0.2.36/tests/assets/pickles/bypass_pocs/gen_bypass_v4.py +0 -431
- modelaudit-0.2.36/tests/assets/samples/jinja2/benign_conditional_format.json +0 -8
- modelaudit-0.2.36/tests/assets/samples/jinja2/benign_huggingface_chat.json +0 -33
- modelaudit-0.2.36/tests/assets/samples/jinja2/benign_simple_template.json +0 -9
- modelaudit-0.2.36/tests/assets/samples/jinja2/benign_template.j2 +0 -9
- modelaudit-0.2.36/tests/assets/samples/jinja2/malicious_cve_2024_34359.json +0 -34
- modelaudit-0.2.36/tests/assets/samples/jinja2/malicious_env_vars.json +0 -7
- modelaudit-0.2.36/tests/assets/samples/jinja2/malicious_file_read.json +0 -9
- modelaudit-0.2.36/tests/assets/samples/jinja2/malicious_loop_exploit.json +0 -9
- modelaudit-0.2.36/tests/assets/samples/jinja2/malicious_obfuscated.json +0 -7
- modelaudit-0.2.36/tests/assets/samples/jinja2/malicious_subprocess.template +0 -6
- modelaudit-0.2.36/tests/assets/samples/jinja2/tokenizer_config.json +0 -34
- modelaudit-0.2.36/tests/assets/samples/keras/basic_lambda_layer.h5 +0 -0
- modelaudit-0.2.36/tests/assets/samples/keras/keras_zip_format.keras +0 -0
- modelaudit-0.2.36/tests/assets/samples/keras/lambda_exfiltration.h5 +0 -0
- modelaudit-0.2.36/tests/assets/samples/keras/lambda_with_imports.h5 +0 -0
- modelaudit-0.2.36/tests/assets/samples/safetensors/malicious_import.safetensors +0 -0
- modelaudit-0.2.36/tests/assets/samples/safetensors/multiple_patterns.safetensors +0 -0
- modelaudit-0.2.36/tests/assets/samples/safetensors/obfuscated_metadata.safetensors +0 -0
- modelaudit-0.2.36/tests/assets/samples/safetensors/safe_model.safetensors +0 -0
- modelaudit-0.2.36/tests/assets/samples/safetensors/script_injection.safetensors +0 -0
- modelaudit-0.2.36/tests/assets/samples/safetensors/shell_commands.safetensors +0 -0
- modelaudit-0.2.36/tests/assets/samples/safetensors/suspicious_url.safetensors +0 -0
- modelaudit-0.2.36/tests/benchmarks/test_scan_benchmarks.py +0 -204
- modelaudit-0.2.36/tests/cache/test_cache_correctness.py +0 -601
- modelaudit-0.2.36/tests/conftest.py +0 -618
- modelaudit-0.2.36/tests/detectors/test_network_comm_detector.py +0 -379
- modelaudit-0.2.36/tests/detectors/test_suspicious_symbols.py +0 -515
- modelaudit-0.2.36/tests/helpers/__init__.py +0 -48
- modelaudit-0.2.36/tests/helpers/file_creators.py +0 -189
- modelaudit-0.2.36/tests/integrations/test_jfrog.py +0 -623
- modelaudit-0.2.36/tests/integrations/test_jfrog_integration.py +0 -377
- modelaudit-0.2.36/tests/integrations/test_sarif_formatter.py +0 -471
- modelaudit-0.2.36/tests/scanners/test_base_scanner.py +0 -993
- modelaudit-0.2.36/tests/scanners/test_catboost_scanner.py +0 -176
- modelaudit-0.2.36/tests/scanners/test_executorch_scanner.py +0 -143
- modelaudit-0.2.36/tests/scanners/test_flax_msgpack_scanner.py +0 -535
- modelaudit-0.2.36/tests/scanners/test_gguf_scanner.py +0 -728
- modelaudit-0.2.36/tests/scanners/test_jinja2_template_scanner.py +0 -600
- modelaudit-0.2.36/tests/scanners/test_joblib_scanner.py +0 -74
- modelaudit-0.2.36/tests/scanners/test_joblib_scanner_codecs.py +0 -153
- modelaudit-0.2.36/tests/scanners/test_keras_h5_scanner.py +0 -1618
- modelaudit-0.2.36/tests/scanners/test_keras_zip_scanner.py +0 -2728
- modelaudit-0.2.36/tests/scanners/test_lightgbm_scanner.py +0 -151
- modelaudit-0.2.36/tests/scanners/test_llamafile_scanner.py +0 -184
- modelaudit-0.2.36/tests/scanners/test_manifest_scanner.py +0 -957
- modelaudit-0.2.36/tests/scanners/test_metadata_scanner.py +0 -310
- modelaudit-0.2.36/tests/scanners/test_mxnet_scanner.py +0 -318
- modelaudit-0.2.36/tests/scanners/test_nemo_scanner.py +0 -437
- modelaudit-0.2.36/tests/scanners/test_numpy_scanner.py +0 -419
- modelaudit-0.2.36/tests/scanners/test_onnx_scanner.py +0 -693
- modelaudit-0.2.36/tests/scanners/test_openvino_scanner.py +0 -261
- modelaudit-0.2.36/tests/scanners/test_pickle_scanner.py +0 -7937
- modelaudit-0.2.36/tests/scanners/test_picklescan_adapter.py +0 -855
- modelaudit-0.2.36/tests/scanners/test_pmml_scanner.py +0 -443
- modelaudit-0.2.36/tests/scanners/test_pytorch_binary_scanner.py +0 -320
- modelaudit-0.2.36/tests/scanners/test_pytorch_zip_scanner.py +0 -1220
- modelaudit-0.2.36/tests/scanners/test_r_serialized_scanner.py +0 -280
- modelaudit-0.2.36/tests/scanners/test_rknn_scanner.py +0 -105
- modelaudit-0.2.36/tests/scanners/test_rule_mapper.py +0 -33
- modelaudit-0.2.36/tests/scanners/test_safetensors_scanner.py +0 -480
- modelaudit-0.2.36/tests/scanners/test_scanner_registry.py +0 -549
- modelaudit-0.2.36/tests/scanners/test_sevenzip_scanner.py +0 -1619
- modelaudit-0.2.36/tests/scanners/test_skops_scanner.py +0 -513
- modelaudit-0.2.36/tests/scanners/test_tar_scanner.py +0 -823
- modelaudit-0.2.36/tests/scanners/test_tflite_scanner.py +0 -377
- modelaudit-0.2.36/tests/scanners/test_torchserve_mar_scanner.py +0 -2089
- modelaudit-0.2.36/tests/scanners/test_weight_distribution_scanner.py +0 -799
- modelaudit-0.2.36/tests/scanners/test_xgboost_scanner.py +0 -524
- modelaudit-0.2.36/tests/scanners/test_zip_scanner.py +0 -974
- modelaudit-0.2.36/tests/scripts/test_compare_pickle_scanners.py +0 -211
- modelaudit-0.2.36/tests/test_cli.py +0 -2351
- modelaudit-0.2.36/tests/test_core.py +0 -716
- modelaudit-0.2.36/tests/test_dill_joblib_enhanced.py +0 -343
- modelaudit-0.2.36/tests/test_directory_file_filtering.py +0 -332
- modelaudit-0.2.36/tests/test_exit_codes.py +0 -428
- modelaudit-0.2.36/tests/test_integration.py +0 -394
- modelaudit-0.2.36/tests/test_jit_script_integration.py +0 -198
- modelaudit-0.2.36/tests/test_lazy_loading.py +0 -465
- modelaudit-0.2.36/tests/test_metadata_extractor.py +0 -613
- modelaudit-0.2.36/tests/test_models.py +0 -799
- modelaudit-0.2.36/tests/test_nested_pickle_integration.py +0 -430
- modelaudit-0.2.36/tests/test_network_comm_integration.py +0 -242
- modelaudit-0.2.36/tests/test_pickle_context_filtering.py +0 -369
- modelaudit-0.2.36/tests/test_regression_corpus.py +0 -119
- modelaudit-0.2.36/tests/test_regular_scan_hash.py +0 -278
- modelaudit-0.2.36/tests/test_rules.py +0 -464
- modelaudit-0.2.36/tests/test_security_enhancements.py +0 -462
- modelaudit-0.2.36/tests/test_streaming_scan.py +0 -771
- modelaudit-0.2.36/tests/test_telemetry.py +0 -678
- modelaudit-0.2.36/tests/test_telemetry_decoupling.py +0 -256
- modelaudit-0.2.36/tests/utils/file/test_advanced_size_limits.py +0 -164
- modelaudit-0.2.36/tests/utils/file/test_file_filter.py +0 -224
- modelaudit-0.2.36/tests/utils/file/test_file_type_validation_integration.py +0 -467
- modelaudit-0.2.36/tests/utils/file/test_filetype.py +0 -1070
- modelaudit-0.2.36/tests/utils/file/test_streaming_analysis.py +0 -193
- modelaudit-0.2.36/tests/utils/helpers/test_py_compile_improvements.py +0 -324
- modelaudit-0.2.36/tests/utils/sources/test_cloud_storage.py +0 -593
- modelaudit-0.2.36/tests/utils/sources/test_dvc_integration.py +0 -321
- modelaudit-0.2.36/tests/utils/sources/test_huggingface.py +0 -755
- modelaudit-0.2.36/tests/utils/test_result_conversion.py +0 -336
- modelaudit-0.2.36/uv.lock +0 -6241
- {modelaudit-0.2.36 → modelaudit-0.2.38}/.dockerignore +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/.editorconfig +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/.gitattributes +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/.github/CODEOWNERS +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/.github/markdown-link-check-config.json +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/.github/workflows/validate-pr-title.yml +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/.mailmap +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/.modelaudit.toml.example +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/.prettierignore +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/CLAUDE.md +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/CODE_OF_CONDUCT.md +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/LICENSE +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/MANIFEST.in +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/SUPPORT.md +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/codecov.yml +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/docker-compose.yml +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/docker-entrypoint.sh +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/docs/maintainers/dependency-policy.md +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/docs/maintainers/triage-playbook.md +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/docs/user/metadata-extraction.md +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/__init__.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/__main__.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/analysis/anomaly_detector.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/analysis/enhanced_pattern_detector.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/analysis/framework_patterns.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/analysis/ml_context_analyzer.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/analysis/opcode_sequence_analyzer.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/analysis/semantic_analyzer.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/analysis/unified_context.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/auth/__init__.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/auth/client.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/cache/__init__.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/cache/adaptive_cache_keys.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/cache/batch_operations.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/cache/cache_manager.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/cache/optimized_config.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/cache/scan_results_cache.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/cache/trusted_config_store.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/config/__init__.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/config/constants.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/config/data/spdx_licenses.json +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/config/generated_keras_layers.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/config/local_config.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/config/name_blacklist.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/config/rule_config.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/detectors/__init__.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/detectors/cve_patterns.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/detectors/jit_script.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/detectors/secrets.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/integrations/__init__.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/integrations/mlflow.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/integrations/sbom_generator.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/progress/__init__.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/progress/base.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/progress/console.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/progress/file.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/progress/hooks.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/progress/multi_phase.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/protos/LICENSE +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/protos/NOTICE +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/protos/__init__.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/protos/py.typed +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/protos/tensorflow/__init__.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/protos/tensorflow/core/__init__.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/protos/tensorflow/core/framework/__init__.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/protos/tensorflow/core/protobuf/__init__.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/py.typed +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/scanners/_archive_config.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/scanners/_archive_locations.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/scanners/_archive_outcomes.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/scanners/_string_extraction.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/scanners/cntk_scanner.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/scanners/compressed_scanner.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/scanners/coreml_scanner.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/scanners/oci_layer_scanner.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/scanners/pytorch_binary_scanner.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/scanners/pytorch_zip_support/__init__.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/scanners/pytorch_zip_support/archive_members.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/scanners/tensorrt_scanner.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/scanners/text_scanner.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/scanners/tf_metagraph_scanner.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/scanners/tflite_scanner.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/scanners/torch7_scanner.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/utils/__init__.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/utils/_path_hardening.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/utils/auto_defaults.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/utils/file/__init__.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/utils/file/_compression.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/utils/file/handlers.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/utils/file/large_file_handler.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/utils/helpers/__init__.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/utils/helpers/assets.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/utils/helpers/code_validation.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/utils/helpers/disk_space.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/utils/helpers/file_hash.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/utils/helpers/file_iterator.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/utils/helpers/interrupt_handler.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/utils/helpers/ml_context.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/utils/helpers/secure_hasher.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/utils/lfs.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/utils/model_extensions.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/utils/sources/__init__.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/utils/sources/_huggingface_cache.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/utils/sources/pytorch_hub.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/utils/tensorflow_compat.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/version.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/whitelists/__init__.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/whitelists/huggingface_organizations.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/modelaudit/whitelists/huggingface_popular.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/package.json +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/packages/modelaudit-picklescan/src/modelaudit_picklescan/__init__.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/packages/modelaudit-picklescan/src/modelaudit_picklescan/py.typed +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/packages/modelaudit-picklescan/src/modelaudit_picklescan/report.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/packages/modelaudit-picklescan/tests/conftest.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/packages/modelaudit-picklescan/tests/test_import_boundary.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/packages/modelaudit-picklescan/uv.lock +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/pyproject.toml.example +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/renovate.json +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/scripts/benchmark_report.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/scripts/fetch_hf_org_models.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/scripts/fetch_hf_top_models.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/scripts/generate_keras_layer_inventory.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/scripts/jax_flax_scanning_demo.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/scripts/minimal_circular_check.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/__init__.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/analysis/test_analysis_modules.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/analysis/test_anomaly_detector.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/analysis/test_enhanced_pattern_detector.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/analysis/test_entropy_analyzer.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/analysis/test_framework_patterns.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/analysis/test_ml_context_analyzer.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/analysis/test_opcode_sequence_analyzer.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/analysis/test_unified_context.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/exploits/exploit1_basic_torch_bypass.pkl +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/exploits/exploit2_advanced_torch_bypass.pkl +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/exploits/exploit3_sophisticated_hybrid.pkl +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/exploits/exploit4_supply_chain_attack.pkl +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/exploits/exploit5_ultra_high_confidence.pkl +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/exploits/exploit6_ordereddict_bypass.pkl +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/exploits/exploit7_nested_collections.pkl +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/exploits/exploit9_manual_construction.pkl +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/exploits/exploit_ultimate_50pct.pkl +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/generators/generate_7z_test_assets.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/generators/generate_advanced_pickle_tests.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/generators/generate_evil_pickle.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/generators/generate_jinja2_test_assets.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/generators/generate_nested_pickle_assets.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/generators/generate_os_alias_tests.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/generators/generate_safe_nested_assets.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/generators/generate_security_assets.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/pickles/memo_attack.pkl +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/pickles/multiple_stream_attack.pkl +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/pickles/nt_alias_attack.pkl +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/pickles/posix_alias_attack.pkl +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/pickles/stack_global_attack.pkl +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/archives/path_traversal.zip +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/archives/safe_model.zip +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/jinja2/benign/chatml_format.json +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/jinja2/benign/complex_legitimate.json +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/jinja2/benign/conditional_system.json +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/jinja2/benign/huggingface_llama.json +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/jinja2/benign/simple_roles.json +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/jinja2/benign/special_tokens.json +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/jinja2/edge_cases/empty_template.json +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/jinja2/edge_cases/malformed_template.json +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/jinja2/edge_cases/multiple_templates.json +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/jinja2/edge_cases/no_template.json +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/jinja2/edge_cases/oversized_template.json +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/jinja2/malicious/attr_bypass.json +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/jinja2/malicious/combined_attack.json +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/jinja2/malicious/config_exploit.json +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/jinja2/malicious/cve_2024_34359_original.json +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/jinja2/malicious/direct_eval.json +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/jinja2/malicious/env_extraction.json +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/jinja2/malicious/file_access.json +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/jinja2/malicious/hex_bypass.json +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/jinja2/malicious/loop_discovery.json +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/jinja2/malicious/network_exfil.json +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/jinja2/malicious/request_exploit.json +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/jinja2/malicious/subprocess_injection.json +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/jinja2/obfuscated/base64_payload.json +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/jinja2/obfuscated/char_construction.json +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/jinja2/obfuscated/format_bypass.json +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/jinja2/obfuscated/getattr_bypass.json +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/jinja2/standalone/benign_chat.j2 +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/jinja2/standalone/malicious_standalone.jinja +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/jinja2/standalone/suspicious_benign.template +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/jinja2/yaml/malicious_config.yaml +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/jinja2/yaml/model_config.yaml +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/keras/custom_layer_attack.h5 +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/keras/loss_injection.h5 +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/keras/malicious_lambda.h5 +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/keras/metric_injection.h5 +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/keras/safe_model.h5 +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/manifests/safe_config.json +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/manifests/suspicious_config.json +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/pickles/decode_exec_chain.pkl +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/pickles/dill_func.pkl +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/pickles/malicious_model_realistic.pkl +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/pickles/malicious_system_call.pkl +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/pickles/nested_pickle_base64.pkl +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/pickles/nested_pickle_hex.pkl +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/pickles/nested_pickle_multistage.pkl +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/pickles/nested_pickle_raw.pkl +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/pickles/safe_data.pkl +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/pickles/safe_large_model.pkl +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/pickles/safe_model_with_binary.pkl +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/pickles/safe_model_with_encoding.pkl +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/pickles/safe_model_with_tokens.pkl +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/pickles/safe_nested_structure.pkl +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/pickles/simple_nested.pkl +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/pipeline.skops +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/pytorch/malicious_eval.pt +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/pytorch/safe_model.pt +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/tensorflow/malicious_pyfunc/saved_model.pb +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/samples/tensorflow/safe_savedmodel/saved_model.pb +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/scenarios/license_scenarios/agpl_component/agpl_model.pkl +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/scenarios/license_scenarios/agpl_component/neural_network.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/scenarios/license_scenarios/mit_model/config.json +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/scenarios/license_scenarios/mit_model/model.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/scenarios/license_scenarios/mit_model/model_weights.pkl +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/scenarios/license_scenarios/mixed_licenses/LICENSE +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/scenarios/license_scenarios/mixed_licenses/apache_component.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/scenarios/license_scenarios/mixed_licenses/dataset_cc_nc.json +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/scenarios/license_scenarios/mixed_licenses/gpl_utility.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/scenarios/license_scenarios/mixed_licenses/mixed_model.pkl +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/scenarios/license_scenarios/unlicensed_dataset/embeddings.npy +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/scenarios/license_scenarios/unlicensed_dataset/features.csv +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/scenarios/license_scenarios/unlicensed_dataset/training_data.json +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/scenarios/security_scenarios/mixed_malicious_model/config.json +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/assets/scenarios/security_scenarios/mixed_malicious_model/model.pkl +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/cache/__init__.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/cache/test_optimized_config.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/cli_output.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/config/__init__.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/config/test_name_blacklist.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/demo_license_functionality.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/detectors/test_builtin_detection.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/detectors/test_compile_eval_variants.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/detectors/test_cve_detection.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/detectors/test_jit_script_detector.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/detectors/test_runpy_detection.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/detectors/test_secrets_detector.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/helpers/frameworks.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/integrations/test_license_checker.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/integrations/test_license_integration.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/integrations/test_mlflow_integration.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/integrations/test_sbom_license_integration.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/integrations/test_sbom_url_fixes.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/progress/__init__.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/progress/test_base.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/scanners/test_cntk_scanner.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/scanners/test_compressed_scanner.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/scanners/test_coreml_scanner.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/scanners/test_jax_checkpoint_scanner.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/scanners/test_oci_layer_scanner.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/scanners/test_onnx_dependency_handling.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/scanners/test_paddle_scanner.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/scanners/test_rule_code_registry_consistency.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/scanners/test_skops_content_analysis.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/scanners/test_tensorrt_scanner.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/scanners/test_tf_metagraph_scanner.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/scanners/test_tf_savedmodel_scanner.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/scanners/test_torch7_scanner.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_asset_inventory_integration.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_asset_list.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_auth_config.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_basic.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_benchmark_report.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_bug1_confidence_exploit.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_cache_cli.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_cache_optimizations.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_checks_recording.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_cli_cache_dir.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_cli_default_command.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_cli_file_filtering.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_cli_license_integration.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_cli_logging_handlers.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_cli_output.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_cloud_url_detection.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_core_asset_extraction.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_cve_2025_10155_bin_pickle.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_debug_command.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_double_interrupt.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_false_positive_fixes.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_file_hash.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_gguf_sbom_integration.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_graceful_degradation.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_header_discrepancy.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_huggingface_extensions.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_huggingface_symlinks.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_importlib_detection.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_jax_flax_integration.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_lazy_loading_integration.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_manifest_name_policy.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_os_alias_detection.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_os_subprocess_detection.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_path_traversal.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_performance_benchmarks.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_progress.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_pydantic_models.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_python_version_warning.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_pytorch_zip_detection.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_real_world_dill_joblib.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_safetensors_optimization.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_secure_hasher.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_security_asset_integration.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_shebang_context.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_simple_jinja2.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_sklearn_joblib_false_positive.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_tensorflow_lambda_detection.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_timeout_configuration.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_utils.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_weak_hash_detection.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_webbrowser_detection.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_why_explanations.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/test_xdist_status.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/utils/__init__.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/utils/file/__init__.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/utils/file/test_advanced_file_handler.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/utils/file/test_integration_file_type_demo.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/utils/file/test_large_file_handler.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/utils/file/test_streaming_preview.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/utils/helpers/test_asset_from_scan_result.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/utils/helpers/test_auto_defaults.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/utils/helpers/test_code_validation.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/utils/helpers/test_disk_space.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/utils/helpers/test_file_iterator.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/utils/helpers/test_interrupt_handling.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/utils/helpers/test_ml_context_false_positives.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/utils/helpers/test_secure_hasher.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/utils/sources/test_pytorch_hub.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/utils/test_lfs.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/whitelists/__init__.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/whitelists/test_combined.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/whitelists/test_huggingface_popular.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/whitelists/test_organizations.py +0 -0
- {modelaudit-0.2.36 → modelaudit-0.2.38}/tests/xdist_status.py +0 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Summary
|
|
2
|
+
|
|
3
|
+
Describe the change and user impact.
|
|
4
|
+
|
|
5
|
+
## Validation
|
|
6
|
+
|
|
7
|
+
- [ ] `uv run ruff format --check modelaudit/ packages/modelaudit-picklescan/src packages/modelaudit-picklescan/tests tests/`
|
|
8
|
+
- [ ] `uv run ruff check modelaudit/ packages/modelaudit-picklescan/src packages/modelaudit-picklescan/tests tests/`
|
|
9
|
+
- [ ] `uv run mypy modelaudit/ packages/modelaudit-picklescan/src packages/modelaudit-picklescan/tests tests/`
|
|
10
|
+
- [ ] `uv run pytest -n auto -m "not slow and not integration" --maxfail=1`
|
|
11
|
+
|
|
12
|
+
## Checklist
|
|
13
|
+
|
|
14
|
+
- [ ] I followed the security-first guidelines in `AGENTS.md`.
|
|
15
|
+
- [ ] I did not weaken detection behavior.
|
|
16
|
+
- [ ] I added/updated tests when behavior changed.
|
|
17
|
+
- [ ] I updated docs where needed.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# GitHub Actions Workflows
|
|
2
|
+
|
|
3
|
+
| Workflow | File | Triggers |
|
|
4
|
+
| -------------------------- | ----------------------- | ----------------------------------------- |
|
|
5
|
+
| **Python CI** | `test.yml` | Python, workflow, and dependency changes |
|
|
6
|
+
| **Performance Benchmarks** | `perf.yml` | PRs, pushes to main, manual dispatch |
|
|
7
|
+
| **Documentation Check** | `docs-check.yml` | Markdown/text/RST/license changes |
|
|
8
|
+
| **Docker Image CI** | `docker-image-test.yml` | Dockerfile or Python code changes |
|
|
9
|
+
| **Validate PR Title** | `validate-pr-title.yml` | PR open/edit events |
|
|
10
|
+
| **CodeQL** | `codeql.yml` | Pushes, PRs, weekly schedule, manual runs |
|
|
11
|
+
| **Nightly CI** | `nightly.yml` | Nightly schedule and manual dispatch |
|
|
12
|
+
| **Release** | `release-please.yml` | Pushes to main and manual dispatch |
|
|
13
|
+
| **Docker Publish** | `docker-publish.yml` | Published releases and manual dispatch |
|
|
14
|
+
|
|
15
|
+
Python CI ignores documentation-only PRs, which are handled by the documentation check workflow. Code PRs run fast feedback on Python 3.12, root matrix coverage on Python 3.10 and 3.13, the NumPy compatibility lane on Python 3.10 and 3.11, Windows tests on Python 3.11, and the standalone pickle package matrix on Python 3.10-3.13. Pushes to `main` run the full root and NumPy matrices across Python 3.10-3.13.
|
|
16
|
+
|
|
17
|
+
The performance workflow posts a sticky benchmark summary comment on same-repo PRs, uploads benchmark JSON plus Markdown summaries as workflow artifacts, and reports regressions or missing benchmarks without blocking the PR.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
name: CodeQL Security Analysis
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
pull_request:
|
|
8
|
+
branches:
|
|
9
|
+
- main
|
|
10
|
+
schedule:
|
|
11
|
+
# Run weekly on Monday at 06:00 UTC
|
|
12
|
+
- cron: "0 6 * * 1"
|
|
13
|
+
workflow_dispatch:
|
|
14
|
+
|
|
15
|
+
permissions:
|
|
16
|
+
actions: read
|
|
17
|
+
contents: read
|
|
18
|
+
security-events: write
|
|
19
|
+
|
|
20
|
+
concurrency:
|
|
21
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
22
|
+
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
|
23
|
+
|
|
24
|
+
jobs:
|
|
25
|
+
analyze-python:
|
|
26
|
+
name: Analyze Python
|
|
27
|
+
runs-on: ubuntu-latest
|
|
28
|
+
timeout-minutes: 20
|
|
29
|
+
steps:
|
|
30
|
+
- name: Checkout repo
|
|
31
|
+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
32
|
+
|
|
33
|
+
- name: Initialize CodeQL
|
|
34
|
+
uses: github/codeql-action/init@c10b8064de6f491fea524254123dbe5e09572f13 # v4
|
|
35
|
+
with:
|
|
36
|
+
languages: python
|
|
37
|
+
build-mode: none
|
|
38
|
+
|
|
39
|
+
- name: Perform CodeQL Analysis
|
|
40
|
+
uses: github/codeql-action/analyze@c10b8064de6f491fea524254123dbe5e09572f13 # v4
|
|
41
|
+
with:
|
|
42
|
+
category: "/language:python"
|
|
43
|
+
upload: ${{ github.event.pull_request.head.repo.fork == true && 'never' || 'always' }}
|
|
44
|
+
|
|
45
|
+
analyze-actions:
|
|
46
|
+
name: Analyze GitHub Actions
|
|
47
|
+
runs-on: ubuntu-latest
|
|
48
|
+
timeout-minutes: 20
|
|
49
|
+
steps:
|
|
50
|
+
- name: Checkout repo
|
|
51
|
+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
52
|
+
|
|
53
|
+
- name: Initialize CodeQL
|
|
54
|
+
uses: github/codeql-action/init@c10b8064de6f491fea524254123dbe5e09572f13 # v4
|
|
55
|
+
with:
|
|
56
|
+
languages: actions
|
|
57
|
+
build-mode: none
|
|
58
|
+
|
|
59
|
+
- name: Perform CodeQL Analysis
|
|
60
|
+
uses: github/codeql-action/analyze@c10b8064de6f491fea524254123dbe5e09572f13 # v4
|
|
61
|
+
with:
|
|
62
|
+
category: "/language:actions"
|
|
63
|
+
upload: ${{ github.event.pull_request.head.repo.fork == true && 'never' || 'always' }}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
name: Docker Image CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
paths:
|
|
6
|
+
- "Dockerfile*"
|
|
7
|
+
- ".dockerignore"
|
|
8
|
+
- "modelaudit/**"
|
|
9
|
+
- "packages/modelaudit-picklescan/**"
|
|
10
|
+
- "pyproject.toml"
|
|
11
|
+
- "uv.lock"
|
|
12
|
+
- ".github/workflows/docker-image-test.yml"
|
|
13
|
+
push:
|
|
14
|
+
branches:
|
|
15
|
+
- main
|
|
16
|
+
workflow_dispatch:
|
|
17
|
+
|
|
18
|
+
permissions:
|
|
19
|
+
contents: read
|
|
20
|
+
pull-requests: read
|
|
21
|
+
|
|
22
|
+
jobs:
|
|
23
|
+
# Detect what changed to optimize Docker builds
|
|
24
|
+
changes:
|
|
25
|
+
name: Detect Docker Changes
|
|
26
|
+
runs-on: ubuntu-latest
|
|
27
|
+
outputs:
|
|
28
|
+
docker: ${{ steps.filter.outputs.docker }}
|
|
29
|
+
full-image: ${{ steps.filter.outputs.full-image }}
|
|
30
|
+
steps:
|
|
31
|
+
- uses: actions/checkout@v6
|
|
32
|
+
- uses: dorny/paths-filter@v4
|
|
33
|
+
id: filter
|
|
34
|
+
with:
|
|
35
|
+
filters: |
|
|
36
|
+
docker:
|
|
37
|
+
- 'Dockerfile*'
|
|
38
|
+
- '.dockerignore'
|
|
39
|
+
- 'modelaudit/**'
|
|
40
|
+
- 'packages/modelaudit-picklescan/**'
|
|
41
|
+
- 'pyproject.toml'
|
|
42
|
+
- 'uv.lock'
|
|
43
|
+
- '.github/workflows/docker-image-test.yml'
|
|
44
|
+
full-image:
|
|
45
|
+
- 'Dockerfile.full'
|
|
46
|
+
- 'packages/modelaudit-picklescan/**'
|
|
47
|
+
- '.github/workflows/docker-image-test.yml'
|
|
48
|
+
|
|
49
|
+
build-test-lightweight:
|
|
50
|
+
name: Build and Test Lightweight Docker Image
|
|
51
|
+
needs: changes
|
|
52
|
+
# Only run if Docker-related files changed
|
|
53
|
+
if: needs.changes.outputs.docker == 'true'
|
|
54
|
+
runs-on: ubuntu-latest
|
|
55
|
+
timeout-minutes: 30 # Increased for reliability
|
|
56
|
+
steps:
|
|
57
|
+
- uses: actions/checkout@v6
|
|
58
|
+
|
|
59
|
+
- name: Set up Docker Buildx
|
|
60
|
+
uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # v4
|
|
61
|
+
|
|
62
|
+
- name: Build lightweight image
|
|
63
|
+
uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7
|
|
64
|
+
with:
|
|
65
|
+
context: .
|
|
66
|
+
file: Dockerfile
|
|
67
|
+
tags: modelaudit:lightweight
|
|
68
|
+
load: true
|
|
69
|
+
cache-from: type=gha,scope=lightweight
|
|
70
|
+
cache-to: type=gha,mode=max,scope=lightweight
|
|
71
|
+
build-args: |
|
|
72
|
+
BUILDKIT_INLINE_CACHE=1
|
|
73
|
+
|
|
74
|
+
- name: Test lightweight container help command
|
|
75
|
+
run: |
|
|
76
|
+
docker run --rm modelaudit:lightweight --help
|
|
77
|
+
|
|
78
|
+
- name: Test lightweight container scan help
|
|
79
|
+
run: |
|
|
80
|
+
docker run --rm modelaudit:lightweight scan --help
|
|
81
|
+
|
|
82
|
+
- name: Test lightweight container version
|
|
83
|
+
run: |
|
|
84
|
+
# Test that the package is properly installed
|
|
85
|
+
docker run --rm modelaudit:lightweight --version
|
|
86
|
+
|
|
87
|
+
- name: Test lightweight container with invalid command
|
|
88
|
+
run: |
|
|
89
|
+
# This should fail gracefully
|
|
90
|
+
docker run --rm modelaudit:lightweight invalid-command && exit 1 || echo "Command properly rejected invalid input"
|
|
91
|
+
|
|
92
|
+
- name: Scan image for vulnerabilities
|
|
93
|
+
uses: aquasecurity/trivy-action@57a97c7e7821a5776cebc9bb87c984fa69cba8f1 # 0.35.0
|
|
94
|
+
with:
|
|
95
|
+
# Pin an explicit released Trivy binary to avoid setup failures when
|
|
96
|
+
# auto-resolved tags exist without matching release assets.
|
|
97
|
+
version: v0.69.2
|
|
98
|
+
image-ref: modelaudit:lightweight
|
|
99
|
+
format: table
|
|
100
|
+
exit-code: "1"
|
|
101
|
+
severity: CRITICAL,HIGH
|
|
102
|
+
ignore-unfixed: true
|
|
103
|
+
|
|
104
|
+
- name: Test lightweight container with actual scan
|
|
105
|
+
run: |
|
|
106
|
+
# Create a test model file using Docker to ensure Python is available
|
|
107
|
+
docker run --rm -v $(pwd):/data python:3.11-slim@sha256:543d6cace00ffc96bc95d332493bb28a4332c6dd614aab5fcbd649ae8a7953d9 sh -c "python -c \"import pickle; pickle.dump({'test': 'data'}, open('/data/test.pkl', 'wb'))\""
|
|
108
|
+
# Now scan the created file
|
|
109
|
+
docker run --rm -v $(pwd):/data modelaudit:lightweight /data/test.pkl
|
|
110
|
+
|
|
111
|
+
build-test-full:
|
|
112
|
+
name: Build and Test Full Docker Image
|
|
113
|
+
needs: [changes, build-test-lightweight]
|
|
114
|
+
runs-on: ubuntu-latest
|
|
115
|
+
timeout-minutes: 90 # Increased for large ML dependency builds
|
|
116
|
+
# Only run if Dockerfile.full specifically changed
|
|
117
|
+
if: needs.changes.outputs.full-image == 'true'
|
|
118
|
+
steps:
|
|
119
|
+
- uses: actions/checkout@v6
|
|
120
|
+
|
|
121
|
+
- name: Set up QEMU
|
|
122
|
+
uses: docker/setup-qemu-action@ce360397dd3f832beb865e1373c09c0e9f86d70a # v4
|
|
123
|
+
|
|
124
|
+
- name: Set up Docker Buildx
|
|
125
|
+
uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # v4
|
|
126
|
+
|
|
127
|
+
- name: Build full image
|
|
128
|
+
uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7
|
|
129
|
+
with:
|
|
130
|
+
context: .
|
|
131
|
+
file: Dockerfile.full
|
|
132
|
+
tags: modelaudit:full
|
|
133
|
+
load: true
|
|
134
|
+
cache-from: type=gha,scope=full
|
|
135
|
+
cache-to: type=gha,mode=max,scope=full
|
|
136
|
+
build-args: |
|
|
137
|
+
BUILDKIT_INLINE_CACHE=1
|
|
138
|
+
timeout-minutes: 60 # Increased timeout for ML dependency build
|
|
139
|
+
|
|
140
|
+
- name: Test full container help command
|
|
141
|
+
run: |
|
|
142
|
+
docker run --rm modelaudit:full --help
|
|
143
|
+
|
|
144
|
+
- name: Test full container scan help
|
|
145
|
+
run: |
|
|
146
|
+
docker run --rm modelaudit:full scan --help
|
|
147
|
+
|
|
148
|
+
- name: Test full container version
|
|
149
|
+
run: |
|
|
150
|
+
# Test that the package is properly installed
|
|
151
|
+
docker run --rm modelaudit:full --version
|
|
152
|
+
|
|
153
|
+
- name: Test full container runs as non-root
|
|
154
|
+
run: |
|
|
155
|
+
docker run --rm modelaudit:full python -c "import os; uid = os.getuid(); print(f'Container UID: {uid}'); assert uid == 10001"
|
|
156
|
+
|
|
157
|
+
- name: Scan image for vulnerabilities
|
|
158
|
+
uses: aquasecurity/trivy-action@57a97c7e7821a5776cebc9bb87c984fa69cba8f1 # 0.35.0
|
|
159
|
+
with:
|
|
160
|
+
# Keep full-image scan on the same pinned released Trivy version.
|
|
161
|
+
version: v0.69.2
|
|
162
|
+
image-ref: modelaudit:full
|
|
163
|
+
format: table
|
|
164
|
+
exit-code: "1"
|
|
165
|
+
severity: CRITICAL,HIGH
|
|
166
|
+
ignore-unfixed: true
|
|
167
|
+
|
|
168
|
+
- name: Verify ML dependencies in full image
|
|
169
|
+
run: |
|
|
170
|
+
# Test that ML dependencies are available
|
|
171
|
+
docker run --rm modelaudit:full python -c "import tensorflow, torch, onnx; print('All ML dependencies available')" || echo "Warning: Some ML dependencies missing"
|
|
172
|
+
|
|
173
|
+
- name: Test full container with ML model scan
|
|
174
|
+
run: |
|
|
175
|
+
# Create the fixture with a root Python image because the full image intentionally runs as UID 10001.
|
|
176
|
+
docker run --rm -v $(pwd):/data python:3.11-slim@sha256:543d6cace00ffc96bc95d332493bb28a4332c6dd614aab5fcbd649ae8a7953d9 sh -c "python -c \"import pickle; pickle.dump({'test': 'data', 'numbers': [1, 2, 3]}, open('/data/test_numpy.pkl', 'wb')); print('Created test model')\""
|
|
177
|
+
# Scan the bind-mounted model as the non-root full image.
|
|
178
|
+
docker run --rm -v $(pwd):/data modelaudit:full /data/test_numpy.pkl
|
|
179
|
+
|
|
180
|
+
docker-ci-success:
|
|
181
|
+
name: Docker CI Success
|
|
182
|
+
needs: [build-test-lightweight]
|
|
183
|
+
# Don't require full image test to pass since it's conditional
|
|
184
|
+
if: always()
|
|
185
|
+
runs-on: ubuntu-latest
|
|
186
|
+
steps:
|
|
187
|
+
- name: Check if required jobs succeeded
|
|
188
|
+
run: |
|
|
189
|
+
LIGHTWEIGHT_RESULT="${{ needs.build-test-lightweight.result }}"
|
|
190
|
+
echo "Lightweight Docker build result: $LIGHTWEIGHT_RESULT"
|
|
191
|
+
|
|
192
|
+
# Success or skipped are both acceptable
|
|
193
|
+
# (skipped means the path filters determined the job wasn't needed)
|
|
194
|
+
if [[ "$LIGHTWEIGHT_RESULT" == "success" || "$LIGHTWEIGHT_RESULT" == "skipped" ]]; then
|
|
195
|
+
echo "Docker CI checks passed (or were skipped due to path filters)!"
|
|
196
|
+
exit 0
|
|
197
|
+
else
|
|
198
|
+
echo "Docker CI checks failed!"
|
|
199
|
+
exit 1
|
|
200
|
+
fi
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
name: Docker Publish
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [published]
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
inputs:
|
|
8
|
+
tag:
|
|
9
|
+
description: "Image tag (e.g., 0.2.26)"
|
|
10
|
+
required: true
|
|
11
|
+
|
|
12
|
+
permissions:
|
|
13
|
+
contents: read
|
|
14
|
+
packages: write
|
|
15
|
+
|
|
16
|
+
env:
|
|
17
|
+
REGISTRY: ghcr.io
|
|
18
|
+
IMAGE_NAME: ${{ github.repository }}
|
|
19
|
+
|
|
20
|
+
jobs:
|
|
21
|
+
publish:
|
|
22
|
+
name: Build and Push Docker Image
|
|
23
|
+
runs-on: ubuntu-latest
|
|
24
|
+
timeout-minutes: 30
|
|
25
|
+
steps:
|
|
26
|
+
- name: Checkout repo
|
|
27
|
+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
28
|
+
|
|
29
|
+
- name: Set up QEMU
|
|
30
|
+
uses: docker/setup-qemu-action@ce360397dd3f832beb865e1373c09c0e9f86d70a # v4
|
|
31
|
+
|
|
32
|
+
- name: Set up Docker Buildx
|
|
33
|
+
uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # v4
|
|
34
|
+
|
|
35
|
+
- name: Log in to GHCR
|
|
36
|
+
uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4
|
|
37
|
+
with:
|
|
38
|
+
registry: ${{ env.REGISTRY }}
|
|
39
|
+
username: ${{ github.actor }}
|
|
40
|
+
password: ${{ secrets.GITHUB_TOKEN }}
|
|
41
|
+
|
|
42
|
+
- name: Extract metadata
|
|
43
|
+
id: meta
|
|
44
|
+
uses: docker/metadata-action@030e881283bb7a6894de51c315a6bfe6a94e05cf # v6
|
|
45
|
+
with:
|
|
46
|
+
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
|
47
|
+
tags: |
|
|
48
|
+
type=semver,pattern={{version}}
|
|
49
|
+
type=semver,pattern={{major}}.{{minor}}
|
|
50
|
+
type=sha
|
|
51
|
+
type=raw,value=latest,enable=${{ github.event_name == 'release' }}
|
|
52
|
+
type=raw,value=${{ inputs.tag }},enable=${{ github.event_name == 'workflow_dispatch' }}
|
|
53
|
+
|
|
54
|
+
- name: Build and push lightweight image
|
|
55
|
+
uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7
|
|
56
|
+
with:
|
|
57
|
+
context: .
|
|
58
|
+
file: Dockerfile
|
|
59
|
+
platforms: linux/amd64,linux/arm64
|
|
60
|
+
push: true
|
|
61
|
+
tags: ${{ steps.meta.outputs.tags }}
|
|
62
|
+
labels: ${{ steps.meta.outputs.labels }}
|
|
63
|
+
cache-from: type=gha,scope=publish-lightweight
|
|
64
|
+
cache-to: type=gha,mode=max,scope=publish-lightweight
|
|
65
|
+
|
|
66
|
+
- name: Verify published image
|
|
67
|
+
run: |
|
|
68
|
+
# Pull and verify the image works
|
|
69
|
+
docker pull ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:sha-${GITHUB_SHA::7}
|
|
70
|
+
docker run --rm ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:sha-${GITHUB_SHA::7} --version
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
name: Documentation Check
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
paths:
|
|
6
|
+
- "**.md"
|
|
7
|
+
- "**.txt"
|
|
8
|
+
- "**.rst"
|
|
9
|
+
- "LICENSE*"
|
|
10
|
+
- ".github/workflows/docs-check.yml"
|
|
11
|
+
push:
|
|
12
|
+
branches:
|
|
13
|
+
- main
|
|
14
|
+
paths:
|
|
15
|
+
- "**.md"
|
|
16
|
+
- "**.txt"
|
|
17
|
+
- "**.rst"
|
|
18
|
+
- "LICENSE*"
|
|
19
|
+
- ".github/workflows/docs-check.yml"
|
|
20
|
+
|
|
21
|
+
permissions:
|
|
22
|
+
contents: read
|
|
23
|
+
|
|
24
|
+
jobs:
|
|
25
|
+
format-check:
|
|
26
|
+
name: Check Documentation Formatting
|
|
27
|
+
runs-on: ubuntu-latest
|
|
28
|
+
timeout-minutes: 5
|
|
29
|
+
steps:
|
|
30
|
+
- name: Checkout repo
|
|
31
|
+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
32
|
+
|
|
33
|
+
- name: Get changed files
|
|
34
|
+
id: changed-files
|
|
35
|
+
uses: tj-actions/changed-files@24d32ffd492484c1d75e0c0b894501ddb9d30d62 # v47
|
|
36
|
+
with:
|
|
37
|
+
files: |
|
|
38
|
+
**.md
|
|
39
|
+
**.yaml
|
|
40
|
+
**.yml
|
|
41
|
+
**.json
|
|
42
|
+
|
|
43
|
+
- name: Setup Node.js
|
|
44
|
+
if: steps.changed-files.outputs.any_changed == 'true'
|
|
45
|
+
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
|
|
46
|
+
with:
|
|
47
|
+
node-version: "24"
|
|
48
|
+
|
|
49
|
+
- name: Install Node dependencies
|
|
50
|
+
if: steps.changed-files.outputs.any_changed == 'true'
|
|
51
|
+
run: npm ci --ignore-scripts
|
|
52
|
+
|
|
53
|
+
- name: Check markdown formatting with prettier
|
|
54
|
+
if: steps.changed-files.outputs.any_changed == 'true'
|
|
55
|
+
run: |
|
|
56
|
+
echo "Checking formatting for changed files:"
|
|
57
|
+
echo "${{ steps.changed-files.outputs.all_changed_files }}"
|
|
58
|
+
npx prettier --check ${{ steps.changed-files.outputs.all_changed_files }} || (
|
|
59
|
+
echo "Documentation is not properly formatted. Run:"
|
|
60
|
+
echo "npm ci --ignore-scripts && npx prettier --write '**/*.{md,yaml,yml,json}'"
|
|
61
|
+
exit 1
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
- name: Skip if no relevant files changed
|
|
65
|
+
if: steps.changed-files.outputs.any_changed == 'false'
|
|
66
|
+
run: echo "No documentation files changed, skipping formatting check"
|
|
67
|
+
|
|
68
|
+
- name: Check for broken links in markdown
|
|
69
|
+
if: steps.changed-files.outputs.any_changed == 'true'
|
|
70
|
+
uses: gaurav-nelson/github-action-markdown-link-check@5c5dfc0ac2e225883c0e5f03a85311ec2830d368 # v1
|
|
71
|
+
with:
|
|
72
|
+
use-quiet-mode: "yes"
|
|
73
|
+
use-verbose-mode: "no"
|
|
74
|
+
config-file: ".github/markdown-link-check-config.json"
|
|
75
|
+
continue-on-error: true # Don't fail on broken external links
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
name: Nightly CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
schedule:
|
|
5
|
+
# Run daily at 04:00 UTC
|
|
6
|
+
- cron: "0 4 * * *"
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
|
|
9
|
+
permissions:
|
|
10
|
+
contents: read
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
full-matrix:
|
|
14
|
+
name: Full Tests (Python ${{ matrix.python-version }})
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
timeout-minutes: 45
|
|
17
|
+
strategy:
|
|
18
|
+
fail-fast: false
|
|
19
|
+
matrix:
|
|
20
|
+
python-version: ["3.10", "3.11", "3.12", "3.13"]
|
|
21
|
+
steps:
|
|
22
|
+
- name: Checkout repo
|
|
23
|
+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
24
|
+
|
|
25
|
+
- name: Install uv
|
|
26
|
+
uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7
|
|
27
|
+
with:
|
|
28
|
+
enable-cache: true
|
|
29
|
+
|
|
30
|
+
- name: Pin Python version
|
|
31
|
+
run: |
|
|
32
|
+
uv python pin ${{ matrix.python-version }}
|
|
33
|
+
|
|
34
|
+
- name: Install Rust toolchain
|
|
35
|
+
run: |
|
|
36
|
+
rustup toolchain install stable --profile minimal
|
|
37
|
+
rustup default stable
|
|
38
|
+
|
|
39
|
+
- name: Sync dependencies
|
|
40
|
+
run: |
|
|
41
|
+
uv sync --extra all-ci
|
|
42
|
+
|
|
43
|
+
- name: Run standalone picklescan Rust tests
|
|
44
|
+
run: |
|
|
45
|
+
cargo test --manifest-path packages/modelaudit-picklescan/Cargo.toml
|
|
46
|
+
|
|
47
|
+
- name: Run all tests (fast + slow + integration + performance)
|
|
48
|
+
run: |
|
|
49
|
+
uv run pytest -n auto --tb=short --durations=20
|
|
50
|
+
|
|
51
|
+
windows-full:
|
|
52
|
+
name: Windows Full Tests (Python 3.11)
|
|
53
|
+
runs-on: windows-latest
|
|
54
|
+
timeout-minutes: 45
|
|
55
|
+
steps:
|
|
56
|
+
- name: Checkout repo
|
|
57
|
+
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
58
|
+
|
|
59
|
+
- name: Install uv
|
|
60
|
+
uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7
|
|
61
|
+
|
|
62
|
+
- name: Pin Python version
|
|
63
|
+
run: |
|
|
64
|
+
uv python pin 3.11
|
|
65
|
+
|
|
66
|
+
- name: Install Rust toolchain
|
|
67
|
+
run: |
|
|
68
|
+
rustup toolchain install stable --profile minimal
|
|
69
|
+
rustup default stable
|
|
70
|
+
|
|
71
|
+
- name: Sync dependencies
|
|
72
|
+
run: |
|
|
73
|
+
uv sync --extra all-ci-windows
|
|
74
|
+
|
|
75
|
+
- name: Run standalone picklescan Rust tests
|
|
76
|
+
run: |
|
|
77
|
+
cargo test --manifest-path packages/modelaudit-picklescan/Cargo.toml
|
|
78
|
+
|
|
79
|
+
- name: Run all tests
|
|
80
|
+
run: |
|
|
81
|
+
uv run pytest -n auto --tb=short --durations=20
|