pyroboreplay 0.2.0__tar.gz → 2.7.0__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.
- pyroboreplay-2.7.0/.env.example +27 -0
- pyroboreplay-2.7.0/.gitattributes +42 -0
- pyroboreplay-2.7.0/.github/CI_SETUP.md +223 -0
- pyroboreplay-2.7.0/.github/workflows/ci.yml +125 -0
- pyroboreplay-2.7.0/.github/workflows/docs.yml +37 -0
- pyroboreplay-2.7.0/.github/workflows/release.yml +74 -0
- pyroboreplay-2.7.0/.github/workflows/security.yml +64 -0
- pyroboreplay-2.7.0/.gitignore +43 -0
- pyroboreplay-2.7.0/CAUSALITY_DECISION_ENGINE_VISION.md +295 -0
- pyroboreplay-2.7.0/CLI_STATS_DASHBOARD_FEATURE.md +360 -0
- pyroboreplay-2.7.0/CONTRIBUTING.md +294 -0
- {pyroboreplay-0.2.0 → pyroboreplay-2.7.0}/Cargo.lock +1088 -24
- {pyroboreplay-0.2.0 → pyroboreplay-2.7.0}/Cargo.toml +20 -1
- pyroboreplay-2.7.0/FINAL_REPORT.txt +2 -0
- pyroboreplay-2.7.0/IMPLEMENTATION_SUMMARY.md +341 -0
- pyroboreplay-2.7.0/LICENSE +32 -0
- pyroboreplay-2.7.0/OTEL_SETUP_GUIDE.md +319 -0
- pyroboreplay-2.7.0/PHASE16_CAUSAL_GRAPHS_ROADMAP.md +572 -0
- pyroboreplay-2.7.0/PKG-INFO +441 -0
- pyroboreplay-2.7.0/PRODUCTION_DEPLOYMENT.md +512 -0
- pyroboreplay-2.7.0/README.md +403 -0
- pyroboreplay-2.7.0/ROADMAP.md +192 -0
- pyroboreplay-2.7.0/SECURITY.md +44 -0
- pyroboreplay-2.7.0/STATS_DASHBOARD.md +245 -0
- pyroboreplay-2.7.0/STATS_DASHBOARD_QUICKSTART.md +235 -0
- pyroboreplay-2.7.0/docs/ARCHITECTURE_COMPLETE.md +415 -0
- pyroboreplay-2.7.0/docs/BUILD_SUMMARY.md +366 -0
- pyroboreplay-2.7.0/docs/CODE_OF_CONDUCT.md +65 -0
- pyroboreplay-2.7.0/docs/GITHUB_SETTINGS.md +239 -0
- {pyroboreplay-0.2.0 → pyroboreplay-2.7.0/docs}/IMPLEMENTATION_STATUS.md +40 -7
- pyroboreplay-2.7.0/docs/MLRIAS_ARCHITECTURE.md +539 -0
- pyroboreplay-2.7.0/docs/MLRIAS_PHASES_COMPLETE.md +346 -0
- pyroboreplay-2.7.0/docs/PHASE1_COMPLETION_REPORT.md +326 -0
- pyroboreplay-2.7.0/docs/PHASE1_IMPLEMENTATION.md +583 -0
- pyroboreplay-2.7.0/docs/PHASE2_ADAPTER_STRATEGY.md +293 -0
- pyroboreplay-2.7.0/docs/PHASE2_TESTING_COMPLETE.md +387 -0
- pyroboreplay-2.7.0/docs/PHASE3_COMPLETE.md +269 -0
- pyroboreplay-2.7.0/docs/PHASE3_PHASE4_ROADMAP.md +102 -0
- pyroboreplay-2.7.0/docs/PHASE4_COMPLETE.md +266 -0
- pyroboreplay-2.7.0/docs/PRODUCT_STRATEGY.md +1183 -0
- pyroboreplay-2.7.0/docs/PUBLISH.md +192 -0
- {pyroboreplay-0.2.0 → pyroboreplay-2.7.0}/docs/QUICKSTART.md +2 -2
- pyroboreplay-2.7.0/docs/RELEASES.md +199 -0
- pyroboreplay-2.7.0/docs/RELEASE_v2.0.0.md +217 -0
- pyroboreplay-2.7.0/docs/REVISED_ROADMAP_PHASES_5_ONWARDS.md +712 -0
- pyroboreplay-2.7.0/docs/TESTING_COMPLETE.md +431 -0
- pyroboreplay-2.7.0/docs/TESTING_PLAN.md +1091 -0
- pyroboreplay-2.7.0/docs/TESTING_STATUS.md +319 -0
- pyroboreplay-2.7.0/examples/causal_analysis_demo.rs +238 -0
- pyroboreplay-2.7.0/examples/causal_query_engine_demo.rs +234 -0
- pyroboreplay-2.7.0/examples/causal_visualization_demo.rs +166 -0
- pyroboreplay-2.7.0/examples/compliance_report_demo.rs +184 -0
- pyroboreplay-2.7.0/examples/correlation_analysis_demo.rs +268 -0
- pyroboreplay-2.7.0/examples/counterfactual_reasoning_demo.rs +234 -0
- pyroboreplay-2.7.0/examples/coverage_evolution_demo.rs +199 -0
- pyroboreplay-2.7.0/examples/deterministic_replay_demo.rs +122 -0
- pyroboreplay-2.7.0/examples/diagnostic_report_demo.rs +163 -0
- pyroboreplay-2.7.0/examples/failover_demo.rs +110 -0
- pyroboreplay-2.7.0/examples/fleet_monitor_demo.rs +163 -0
- pyroboreplay-2.7.0/examples/multi_robot_coordination_demo.rs +263 -0
- pyroboreplay-2.7.0/examples/phase1_complete_diagnostics.py +218 -0
- pyroboreplay-2.7.0/examples/pyterrain_bridge_demo.rs +277 -0
- pyroboreplay-2.7.0/examples/recommendation_engine_demo.rs +165 -0
- pyroboreplay-2.7.0/examples/root_cause_analysis_demo.rs +186 -0
- pyroboreplay-2.7.0/examples/spatial_causality_demo.rs +131 -0
- pyroboreplay-2.7.0/examples/sqlite_backend_demo.rs +187 -0
- pyroboreplay-2.7.0/examples/stats_dashboard_demo.rs +101 -0
- pyroboreplay-2.7.0/examples/storage_backend_demo.rs +201 -0
- pyroboreplay-2.7.0/examples/streaming_demo.rs +207 -0
- pyroboreplay-2.7.0/otel_exporter.py +189 -0
- pyroboreplay-2.7.0/pyproject.toml +62 -0
- pyroboreplay-2.7.0/pyroboreplay/_mcp_connector.py +105 -0
- pyroboreplay-2.7.0/pyroboreplay/_mcp_tools.py +309 -0
- pyroboreplay-2.7.0/pyroboreplay/scripts/__init__.py.bak +0 -0
- pyroboreplay-2.7.0/pyroboreplay.toml +22 -0
- pyroboreplay-2.7.0/scripts/test_dashboards_crossplatform.sh +208 -0
- pyroboreplay-2.7.0/src/adapters/configuration.rs +298 -0
- pyroboreplay-2.7.0/src/adapters/linux_log.rs +403 -0
- pyroboreplay-2.7.0/src/adapters/metrics.rs +314 -0
- {pyroboreplay-0.2.0 → pyroboreplay-2.7.0}/src/adapters/mod.rs +11 -0
- pyroboreplay-2.7.0/src/analyzers/adaptive_recalibration.rs +436 -0
- pyroboreplay-2.7.0/src/analyzers/aggregation.rs +265 -0
- pyroboreplay-2.7.0/src/analyzers/coordination/mod.rs +33 -0
- pyroboreplay-2.7.0/src/analyzers/drift_detection.rs +352 -0
- pyroboreplay-2.7.0/src/analyzers/environmental/mod.rs +33 -0
- pyroboreplay-2.7.0/src/analyzers/evidence_quality_scoring.rs +420 -0
- pyroboreplay-2.7.0/src/analyzers/feedback_loop.rs +370 -0
- pyroboreplay-2.7.0/src/analyzers/fleet_learning.rs +509 -0
- pyroboreplay-2.7.0/src/analyzers/gap_narrative_pipeline.rs +395 -0
- pyroboreplay-2.7.0/src/analyzers/gap_to_causal.rs +459 -0
- pyroboreplay-2.7.0/src/analyzers/historical.rs +337 -0
- pyroboreplay-2.7.0/src/analyzers/incident_narrative.rs +479 -0
- pyroboreplay-2.7.0/src/analyzers/mod.rs +407 -0
- pyroboreplay-2.7.0/src/analyzers/multi_factor_causality.rs +468 -0
- pyroboreplay-2.7.0/src/analyzers/phase3_validation.rs +329 -0
- pyroboreplay-2.7.0/src/analyzers/phase4_integration.rs +247 -0
- pyroboreplay-2.7.0/src/analyzers/physical/mechanical_degradation.rs +269 -0
- pyroboreplay-2.7.0/src/analyzers/physical/mod.rs +66 -0
- pyroboreplay-2.7.0/src/analyzers/physical/structural_dynamics.rs +132 -0
- pyroboreplay-2.7.0/src/analyzers/physical/thermal_effects.rs +146 -0
- pyroboreplay-2.7.0/src/analyzers/predictive_gaps.rs +441 -0
- pyroboreplay-2.7.0/src/analyzers/quality_confidence.rs +378 -0
- pyroboreplay-2.7.0/src/analyzers/recalibration.rs +365 -0
- pyroboreplay-2.7.0/src/analyzers/robot_calibration.rs +388 -0
- pyroboreplay-2.7.0/src/analyzers/scoring.rs +256 -0
- pyroboreplay-2.7.0/src/analyzers/sensor/detection_robustness.rs +466 -0
- pyroboreplay-2.7.0/src/analyzers/sensor/mod.rs +48 -0
- pyroboreplay-2.7.0/src/analyzers/sensor/optical_contamination.rs +243 -0
- pyroboreplay-2.7.0/src/analyzers/severity.rs +218 -0
- pyroboreplay-2.7.0/src/analyzers/severity_contracts.rs +423 -0
- pyroboreplay-2.7.0/src/analyzers/system/clock_drift.rs +265 -0
- pyroboreplay-2.7.0/src/analyzers/system/mod.rs +42 -0
- pyroboreplay-2.7.0/src/analyzers/telemetry.rs +342 -0
- pyroboreplay-2.7.0/src/analyzers/test_data.rs +456 -0
- pyroboreplay-2.7.0/src/analyzers/validation.rs +259 -0
- {pyroboreplay-0.2.0 → pyroboreplay-2.7.0}/src/cli/args.rs +21 -1
- pyroboreplay-2.7.0/src/cli/causal_viz.rs +370 -0
- pyroboreplay-2.7.0/src/cli/consolidated_output.rs +399 -0
- pyroboreplay-2.7.0/src/cli/gap_analysis.rs +356 -0
- {pyroboreplay-0.2.0 → pyroboreplay-2.7.0}/src/cli/mod.rs +83 -3
- {pyroboreplay-0.2.0 → pyroboreplay-2.7.0}/src/cli/sensor_stats.rs +9 -1
- pyroboreplay-2.7.0/src/cli/stats_dashboard.rs +380 -0
- pyroboreplay-2.7.0/src/cli/tests_consolidation_integration.rs +181 -0
- pyroboreplay-2.7.0/src/core/anomaly_detector.rs +488 -0
- pyroboreplay-2.7.0/src/core/causality.rs +710 -0
- pyroboreplay-2.7.0/src/core/compliance.rs +570 -0
- pyroboreplay-2.7.0/src/core/confidence_scoring.rs +326 -0
- pyroboreplay-2.7.0/src/core/correlation.rs +463 -0
- pyroboreplay-2.7.0/src/core/counterfactual.rs +521 -0
- pyroboreplay-2.7.0/src/core/coverage_evolution.rs +577 -0
- pyroboreplay-2.7.0/src/core/cross_mission.rs +486 -0
- pyroboreplay-2.7.0/src/core/deterministic_replay.rs +451 -0
- pyroboreplay-2.7.0/src/core/diagnostic_report.rs +451 -0
- {pyroboreplay-0.2.0 → pyroboreplay-2.7.0}/src/core/event.rs +96 -1
- pyroboreplay-2.7.0/src/core/evidence_discovery.rs +284 -0
- pyroboreplay-2.7.0/src/core/explanation.rs +247 -0
- pyroboreplay-2.7.0/src/core/failure_actions.rs +391 -0
- pyroboreplay-2.7.0/src/core/failure_detection/localization.rs +190 -0
- pyroboreplay-2.7.0/src/core/failure_detection/middleware.rs +239 -0
- pyroboreplay-2.7.0/src/core/failure_detection/mod.rs +225 -0
- pyroboreplay-2.7.0/src/core/failure_detection/navigation.rs +294 -0
- pyroboreplay-2.7.0/src/core/failure_detection/perception.rs +203 -0
- pyroboreplay-2.7.0/src/core/failure_detection/system.rs +270 -0
- pyroboreplay-2.7.0/src/core/geospatial_export.rs +299 -0
- pyroboreplay-2.7.0/src/core/incident_analysis.rs +344 -0
- pyroboreplay-2.7.0/src/core/incident_bundle.rs +295 -0
- pyroboreplay-2.7.0/src/core/mod.rs +79 -0
- pyroboreplay-2.7.0/src/core/multi_robot.rs +524 -0
- pyroboreplay-2.7.0/src/core/pyterrain_bridge.rs +388 -0
- pyroboreplay-2.7.0/src/core/recommendation.rs +508 -0
- pyroboreplay-2.7.0/src/core/recommendations_engine.rs +541 -0
- pyroboreplay-2.7.0/src/core/root_cause.rs +449 -0
- pyroboreplay-2.7.0/src/core/spatial_causality.rs +376 -0
- {pyroboreplay-0.2.0 → pyroboreplay-2.7.0}/src/core/timeline.rs +55 -11
- pyroboreplay-2.7.0/src/core/timeline_correlation.rs +456 -0
- pyroboreplay-2.7.0/src/fusion/forensic_reporter.rs +352 -0
- pyroboreplay-2.7.0/src/fusion/invisible_person_detector.rs +307 -0
- pyroboreplay-2.7.0/src/fusion/mod.rs +18 -0
- pyroboreplay-2.7.0/src/fusion/rgb_thermal_fusion.rs +378 -0
- pyroboreplay-2.7.0/src/fusion/thermal_model.rs +373 -0
- pyroboreplay-2.7.0/src/intelligence/agent_friendly_output.rs +58 -0
- pyroboreplay-2.7.0/src/intelligence/event_extraction.rs +72 -0
- pyroboreplay-2.7.0/src/intelligence/hidden_explanations.rs +374 -0
- pyroboreplay-2.7.0/src/intelligence/mod.rs +21 -0
- pyroboreplay-2.7.0/src/intelligence/perception_gap_analysis.rs +428 -0
- pyroboreplay-2.7.0/src/intelligence/scene_reconstruction.rs +485 -0
- pyroboreplay-2.7.0/src/knowledge/change_detection.rs +312 -0
- pyroboreplay-2.7.0/src/knowledge/fleet_terrain_learning.rs +438 -0
- pyroboreplay-2.7.0/src/knowledge/knowledge_graph.rs +76 -0
- pyroboreplay-2.7.0/src/knowledge/longitudinal_reasoning.rs +154 -0
- pyroboreplay-2.7.0/src/knowledge/mod.rs +34 -0
- pyroboreplay-2.7.0/src/knowledge/multi_mission_learning.rs +388 -0
- pyroboreplay-2.7.0/src/knowledge/spatial_grounding.rs +468 -0
- pyroboreplay-2.7.0/src/knowledge/temporal_analysis.rs +62 -0
- pyroboreplay-2.7.0/src/knowledge/terrain_integration.rs +481 -0
- pyroboreplay-2.7.0/src/knowledge/world_model.rs +479 -0
- pyroboreplay-2.7.0/src/lib.rs +763 -0
- pyroboreplay-2.7.0/src/perception/detection_backends.rs +403 -0
- pyroboreplay-2.7.0/src/perception/detection_orchestrator.rs +385 -0
- pyroboreplay-2.7.0/src/perception/gap_context_analyzer.rs +416 -0
- pyroboreplay-2.7.0/src/perception/mod.rs +22 -0
- pyroboreplay-2.7.0/src/perception/object_detection.rs +395 -0
- pyroboreplay-2.7.0/src/perception/object_tracking.rs +396 -0
- pyroboreplay-2.7.0/src/perception/perception_analysis.rs +352 -0
- pyroboreplay-2.7.0/src/perception/retrospective_detection.rs +550 -0
- pyroboreplay-2.7.0/src/perception/scene_understanding.rs +271 -0
- pyroboreplay-2.7.0/src/phase14/analyzer_capabilities.rs +423 -0
- pyroboreplay-2.7.0/src/phase14/mod.rs +53 -0
- pyroboreplay-2.7.0/src/phase14/modality_adapters.rs +701 -0
- pyroboreplay-2.7.0/src/phase14/navigation_session.rs +334 -0
- pyroboreplay-2.7.0/src/phase14/temporal_sync.rs +455 -0
- pyroboreplay-2.7.0/src/phase14/timeline_indexing.rs +504 -0
- pyroboreplay-2.7.0/src/phase14/video_processing.rs +387 -0
- pyroboreplay-2.7.0/src/phase15/costmap_analyzer.rs +97 -0
- pyroboreplay-2.7.0/src/phase15/dynamic_obstacle_analyzer.rs +49 -0
- pyroboreplay-2.7.0/src/phase15/failure_detector.rs +310 -0
- pyroboreplay-2.7.0/src/phase15/finding_generator.rs +69 -0
- pyroboreplay-2.7.0/src/phase15/localization_analyzer.rs +235 -0
- pyroboreplay-2.7.0/src/phase15/mod.rs +48 -0
- pyroboreplay-2.7.0/src/phase15/nav2_limitation_detector.rs +99 -0
- pyroboreplay-2.7.0/src/phase15/planner_analyzer.rs +242 -0
- pyroboreplay-2.7.0/src/phase15/root_cause_generator.rs +57 -0
- pyroboreplay-2.7.0/src/phase15/semantic_gap_analyzer.rs +39 -0
- pyroboreplay-2.7.0/src/phase16/causal_builder.rs +416 -0
- pyroboreplay-2.7.0/src/phase16/decision_reconstructor.rs +398 -0
- pyroboreplay-2.7.0/src/phase16/graph_validator.rs +239 -0
- pyroboreplay-2.7.0/src/phase16/mod.rs +14 -0
- pyroboreplay-2.7.0/src/phase16/pattern_matcher.rs +308 -0
- pyroboreplay-2.7.0/src/phase17/alternative_timeline.rs +261 -0
- pyroboreplay-2.7.0/src/phase17/counterfactual.rs +248 -0
- pyroboreplay-2.7.0/src/phase17/mod.rs +12 -0
- pyroboreplay-2.7.0/src/phase17/outcome_influence.rs +251 -0
- pyroboreplay-2.7.0/src/phase18/decision_clustering.rs +266 -0
- pyroboreplay-2.7.0/src/phase18/fleet_learning.rs +367 -0
- pyroboreplay-2.7.0/src/phase18/mod.rs +12 -0
- pyroboreplay-2.7.0/src/phase18/pattern_discovery.rs +236 -0
- pyroboreplay-2.7.0/src/phase19/mod.rs +14 -0
- pyroboreplay-2.7.0/src/phase19/temporal_patterns.rs +301 -0
- pyroboreplay-2.7.0/src/phase19/trend_detector.rs +309 -0
- pyroboreplay-2.7.0/src/phase19/window_analyzer.rs +290 -0
- pyroboreplay-2.7.0/src/pyroboreplay/__init__.py +44 -0
- pyroboreplay-2.7.0/src/reasoning/explanation_generator.rs +191 -0
- pyroboreplay-2.7.0/src/reasoning/incident_patterns.rs +213 -0
- pyroboreplay-2.7.0/src/reasoning/llm_integration.rs +327 -0
- pyroboreplay-2.7.0/src/reasoning/mod.rs +16 -0
- pyroboreplay-2.7.0/src/reasoning/semantic_search.rs +388 -0
- pyroboreplay-2.7.0/src/storage/audit.rs +239 -0
- pyroboreplay-2.7.0/src/storage/backend.rs +152 -0
- pyroboreplay-2.7.0/src/storage/backends.rs +241 -0
- pyroboreplay-2.7.0/src/storage/failover.rs +440 -0
- pyroboreplay-2.7.0/src/storage/inmemory.rs +294 -0
- pyroboreplay-2.7.0/src/storage/mod.rs +13 -0
- pyroboreplay-2.7.0/src/storage/sqlite.rs +573 -0
- pyroboreplay-2.7.0/src/streaming/channel.rs +323 -0
- pyroboreplay-2.7.0/src/streaming/fleet_monitor.rs +500 -0
- pyroboreplay-2.7.0/src/streaming/kafka_stub.rs +113 -0
- pyroboreplay-2.7.0/src/streaming/live_diagnostics.rs +435 -0
- pyroboreplay-2.7.0/src/streaming/mod.rs +18 -0
- pyroboreplay-2.7.0/src/streaming/processor.rs +365 -0
- pyroboreplay-2.7.0/src/streaming/sla.rs +492 -0
- pyroboreplay-2.7.0/tests/test_actions.rs +298 -0
- pyroboreplay-2.7.0/tests/test_anomaly_detector.rs +323 -0
- pyroboreplay-2.7.0/tests/test_edge_cases.rs +477 -0
- pyroboreplay-2.7.0/tests/test_explanation.rs +207 -0
- pyroboreplay-2.7.0/tests/test_geospatial_export.rs +305 -0
- pyroboreplay-2.7.0/tests/test_mlrias_integration.rs +358 -0
- pyroboreplay-2.7.0/tests/test_performance.rs +374 -0
- pyroboreplay-2.7.0/tests/test_phase2_patterns.rs +451 -0
- pyroboreplay-2.7.0/tests/test_phase2_prediction.rs +433 -0
- pyroboreplay-2.7.0/tests/test_python_api_integration.rs +414 -0
- pyroboreplay-0.2.0/.gitignore +0 -34
- pyroboreplay-0.2.0/PKG-INFO +0 -275
- pyroboreplay-0.2.0/README.md +0 -248
- pyroboreplay-0.2.0/pyproject.toml +0 -46
- pyroboreplay-0.2.0/src/core/mod.rs +0 -5
- pyroboreplay-0.2.0/src/lib.rs +0 -201
- {pyroboreplay-0.2.0 → pyroboreplay-2.7.0}/docs/API.md +0 -0
- {pyroboreplay-0.2.0 → pyroboreplay-2.7.0}/docs/ARCHITECTURE.md +0 -0
- {pyroboreplay-0.2.0 → pyroboreplay-2.7.0}/docs/CAMERA_EXPORT.md +0 -0
- {pyroboreplay-0.2.0 → pyroboreplay-2.7.0/docs}/CLAUDE.md +0 -0
- {pyroboreplay-0.2.0 → pyroboreplay-2.7.0}/docs/IMU_VISUALIZATION.md +0 -0
- {pyroboreplay-0.2.0 → pyroboreplay-2.7.0}/docs/KEYBOARD_SHORTCUTS.md +0 -0
- {pyroboreplay-0.2.0 → pyroboreplay-2.7.0}/docs/LIDAR_VISUALIZATION.md +0 -0
- {pyroboreplay-0.2.0 → pyroboreplay-2.7.0/docs}/ROADMAP.md +0 -0
- {pyroboreplay-0.2.0 → pyroboreplay-2.7.0}/docs/SENSOR_METADATA.md +0 -0
- {pyroboreplay-0.2.0 → pyroboreplay-2.7.0}/examples/camera_export_demo.rs +0 -0
- {pyroboreplay-0.2.0 → pyroboreplay-2.7.0}/examples/generate_warehouse_mission.rs +0 -0
- {pyroboreplay-0.2.0 → pyroboreplay-2.7.0}/examples/imu_visualization_demo.rs +0 -0
- {pyroboreplay-0.2.0 → pyroboreplay-2.7.0}/examples/keyboard_shortcuts_demo.rs +0 -0
- {pyroboreplay-0.2.0 → pyroboreplay-2.7.0}/examples/lidar_visualization_demo.rs +0 -0
- {pyroboreplay-0.2.0 → pyroboreplay-2.7.0}/examples/sensor_metadata_demo.rs +0 -0
- {pyroboreplay-0.2.0 → pyroboreplay-2.7.0}/examples/test_python_api.py +0 -0
- {pyroboreplay-0.2.0 → pyroboreplay-2.7.0}/src/adapters/ros2.rs +0 -0
- {pyroboreplay-0.2.0 → pyroboreplay-2.7.0}/src/cli/camera_export.rs +0 -0
- {pyroboreplay-0.2.0 → pyroboreplay-2.7.0}/src/cli/imu_viz.rs +0 -0
- {pyroboreplay-0.2.0 → pyroboreplay-2.7.0}/src/cli/json_output.rs +0 -0
- {pyroboreplay-0.2.0 → pyroboreplay-2.7.0}/src/cli/keyboard.rs +0 -0
- {pyroboreplay-0.2.0 → pyroboreplay-2.7.0}/src/cli/lidar_viz.rs +0 -0
- {pyroboreplay-0.2.0 → pyroboreplay-2.7.0}/src/cli/replay_ui.rs +0 -0
- {pyroboreplay-0.2.0 → pyroboreplay-2.7.0}/src/main.rs +0 -0
- {pyroboreplay-0.2.0 → pyroboreplay-2.7.0}/tests/integration_tests.rs +0 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# API Configuration
|
|
2
|
+
API_KEY=your_api_key_here
|
|
3
|
+
API_SECRET=your_api_secret_here
|
|
4
|
+
|
|
5
|
+
# Database
|
|
6
|
+
DATABASE_URL=postgresql://user:password@localhost/database_name
|
|
7
|
+
DB_HOST=localhost
|
|
8
|
+
DB_PORT=5432
|
|
9
|
+
DB_USER=user
|
|
10
|
+
DB_PASSWORD=password
|
|
11
|
+
DB_NAME=database
|
|
12
|
+
|
|
13
|
+
# Security
|
|
14
|
+
SECRET_KEY=your_secret_key_here
|
|
15
|
+
ENCRYPTION_KEY=your_encryption_key_here
|
|
16
|
+
|
|
17
|
+
# Environment
|
|
18
|
+
ENVIRONMENT=development
|
|
19
|
+
DEBUG=False
|
|
20
|
+
|
|
21
|
+
# Logging
|
|
22
|
+
LOG_LEVEL=INFO
|
|
23
|
+
LOG_FILE=app.log
|
|
24
|
+
|
|
25
|
+
# Optional features
|
|
26
|
+
REDIS_URL=redis://localhost:6379
|
|
27
|
+
ELASTICSEARCH_URL=http://localhost:9200
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Aggressive language detection: mark everything non-Python as non-detectable
|
|
2
|
+
|
|
3
|
+
# Hide all C/C++ files
|
|
4
|
+
*.c linguist-detectable=false
|
|
5
|
+
*.h linguist-detectable=false
|
|
6
|
+
*.cpp linguist-detectable=false
|
|
7
|
+
*.cc linguist-detectable=false
|
|
8
|
+
*.cxx linguist-detectable=false
|
|
9
|
+
*.C linguist-detectable=false
|
|
10
|
+
*.c++ linguist-detectable=false
|
|
11
|
+
|
|
12
|
+
# Hide Rust
|
|
13
|
+
*.rs linguist-detectable=false
|
|
14
|
+
|
|
15
|
+
# Hide Pawn
|
|
16
|
+
*.pwn linguist-detectable=false
|
|
17
|
+
*.pawn linguist-detectable=false
|
|
18
|
+
|
|
19
|
+
# Hide Makefiles and build config
|
|
20
|
+
Makefile linguist-detectable=false
|
|
21
|
+
makefile linguist-detectable=false
|
|
22
|
+
*.make linguist-detectable=false
|
|
23
|
+
|
|
24
|
+
# Hide DTrace
|
|
25
|
+
*.d linguist-detectable=false
|
|
26
|
+
|
|
27
|
+
# Hide all build/generated artifacts
|
|
28
|
+
build/** linguist-detectable=false
|
|
29
|
+
dist/** linguist-detectable=false
|
|
30
|
+
target/** linguist-detectable=false
|
|
31
|
+
*.so linguist-detectable=false
|
|
32
|
+
*.pyd linguist-detectable=false
|
|
33
|
+
*.dylib linguist-detectable=false
|
|
34
|
+
*.dll linguist-detectable=false
|
|
35
|
+
*.a linguist-detectable=false
|
|
36
|
+
*.o linguist-detectable=false
|
|
37
|
+
|
|
38
|
+
# Force Python as the ONLY detectable language
|
|
39
|
+
*.py linguist-detectable=true
|
|
40
|
+
*.pyi linguist-detectable=true
|
|
41
|
+
pyproject.toml linguist-detectable=true
|
|
42
|
+
setup.py linguist-detectable=true
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
# GitHub Actions CI/CD Setup
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Comprehensive CI/CD pipeline for PyRoboReplay with automated testing, linting, building, security audits, and PyPI publishing.
|
|
6
|
+
|
|
7
|
+
## Workflows
|
|
8
|
+
|
|
9
|
+
### 1. **ci.yml** - Main Continuous Integration
|
|
10
|
+
|
|
11
|
+
Runs on every push to `main`, `master`, `develop` and on all pull requests.
|
|
12
|
+
|
|
13
|
+
**Matrix Testing:**
|
|
14
|
+
- OS: Ubuntu, macOS
|
|
15
|
+
- Rust: stable, beta
|
|
16
|
+
- Python: 3.10, 3.11, 3.12, 3.13
|
|
17
|
+
|
|
18
|
+
**Jobs:**
|
|
19
|
+
- **Test Suite**: `cargo test --lib --verbose`
|
|
20
|
+
- Runs on Ubuntu + macOS with latest Rust
|
|
21
|
+
- Caches dependencies for faster runs
|
|
22
|
+
- ~2-3 min per matrix combination
|
|
23
|
+
|
|
24
|
+
- **Lint & Format**:
|
|
25
|
+
- `cargo fmt -- --check` (Rustfmt validation)
|
|
26
|
+
- `cargo clippy --all-targets --all-features -- -D warnings`
|
|
27
|
+
- Runs on Ubuntu with Rust stable
|
|
28
|
+
- Treats warnings as errors (strict quality gate)
|
|
29
|
+
|
|
30
|
+
- **Build Wheels**:
|
|
31
|
+
- Builds Python wheels using maturin
|
|
32
|
+
- Matrix: Ubuntu + macOS × Python 3.10-3.13
|
|
33
|
+
- Uploads wheels as GitHub artifacts for inspection
|
|
34
|
+
- Validates packaging works across platforms
|
|
35
|
+
|
|
36
|
+
- **Publish** (conditional):
|
|
37
|
+
- Only runs on tags matching `refs/tags/v*`
|
|
38
|
+
- Publishes all wheels to PyPI
|
|
39
|
+
- Requires `PYPI_TOKEN` secret configured in GitHub
|
|
40
|
+
|
|
41
|
+
### 2. **security.yml** - Security & Vulnerability Auditing
|
|
42
|
+
|
|
43
|
+
Runs on every push, pull request, and weekly on schedule (Sunday 00:00 UTC).
|
|
44
|
+
|
|
45
|
+
**Jobs:**
|
|
46
|
+
- **Cargo Audit**:
|
|
47
|
+
- Checks for known security vulnerabilities in dependencies
|
|
48
|
+
- Uses official RustSec advisory database
|
|
49
|
+
- Fails if vulnerabilities found (unless whitelisted)
|
|
50
|
+
|
|
51
|
+
- **Dependency Check**:
|
|
52
|
+
- Identifies outdated/stale dependencies
|
|
53
|
+
- Runs `cargo outdated` for visibility
|
|
54
|
+
- Informational only (doesn't fail)
|
|
55
|
+
|
|
56
|
+
- **Code Coverage**:
|
|
57
|
+
- Generates code coverage reports using `cargo-tarpaulin`
|
|
58
|
+
- Uploads to Codecov for tracking
|
|
59
|
+
- Timeout: 5 minutes per test
|
|
60
|
+
- Excludes benchmark code
|
|
61
|
+
|
|
62
|
+
### 3. **release.yml** - Automated Release Pipeline
|
|
63
|
+
|
|
64
|
+
Triggered automatically when pushing version tags matching pattern `v*` (e.g., `v0.7.0`).
|
|
65
|
+
|
|
66
|
+
**Jobs:**
|
|
67
|
+
- **Create GitHub Release**:
|
|
68
|
+
- Creates a draft release on GitHub with tag info
|
|
69
|
+
- Outputs upload URL for assets
|
|
70
|
+
|
|
71
|
+
- **Build & Publish**:
|
|
72
|
+
- Builds wheels for Python 3.10-3.13 on Ubuntu & macOS
|
|
73
|
+
- Uploads each wheel as release asset
|
|
74
|
+
- Automatically publishes to PyPI
|
|
75
|
+
- Skips duplicates if re-run
|
|
76
|
+
|
|
77
|
+
**Usage:**
|
|
78
|
+
```bash
|
|
79
|
+
git tag v0.8.0
|
|
80
|
+
git push origin v0.8.0
|
|
81
|
+
# Workflow automatically runs, builds, and publishes
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### 4. **docs.yml** - Documentation Validation
|
|
85
|
+
|
|
86
|
+
Runs on every push to main branches and all PRs.
|
|
87
|
+
|
|
88
|
+
**Jobs:**
|
|
89
|
+
- **Documentation Build**:
|
|
90
|
+
- Builds Rust documentation: `cargo doc --no-deps`
|
|
91
|
+
- Includes private items for complete API docs
|
|
92
|
+
- Validates all doc comments compile
|
|
93
|
+
|
|
94
|
+
- **README Validation**:
|
|
95
|
+
- Checks README.md and CLAUDE.md exist
|
|
96
|
+
- Runs markdownlint for markdown compliance
|
|
97
|
+
- Non-blocking (informational only)
|
|
98
|
+
|
|
99
|
+
## GitHub Secrets Required
|
|
100
|
+
|
|
101
|
+
### `PYPI_TOKEN` (Required for PyPI Publishing)
|
|
102
|
+
|
|
103
|
+
1. Generate token at https://pypi.org/manage/account/tokens/
|
|
104
|
+
2. Create token with scope: "Entire account"
|
|
105
|
+
3. Copy token value
|
|
106
|
+
4. In GitHub repo:
|
|
107
|
+
- Settings → Secrets and variables → Actions
|
|
108
|
+
- New repository secret
|
|
109
|
+
- Name: `PYPI_TOKEN`
|
|
110
|
+
- Value: `pypi-AgEI...` (your token)
|
|
111
|
+
|
|
112
|
+
**Note:** Token is automatically masked in logs.
|
|
113
|
+
|
|
114
|
+
## Performance & Caching
|
|
115
|
+
|
|
116
|
+
**Cargo Caching Strategy:**
|
|
117
|
+
- Registry cache: `~/.cargo/registry`
|
|
118
|
+
- Index cache: `~/.cargo/git`
|
|
119
|
+
- Build cache: `target/` directory
|
|
120
|
+
|
|
121
|
+
Cache keys use `Cargo.lock` hash to invalidate when dependencies change.
|
|
122
|
+
|
|
123
|
+
**Build Times (approximate):**
|
|
124
|
+
- Clean build: 2-3 min (Ubuntu), 3-4 min (macOS)
|
|
125
|
+
- Cached build: 30-60 sec
|
|
126
|
+
- Full test suite: 1-2 min
|
|
127
|
+
- Linting: 1-2 min
|
|
128
|
+
|
|
129
|
+
## Status Badges
|
|
130
|
+
|
|
131
|
+
Add to README.md:
|
|
132
|
+
|
|
133
|
+
```markdown
|
|
134
|
+

|
|
135
|
+

|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## Workflow Status & Logs
|
|
139
|
+
|
|
140
|
+
View workflow runs:
|
|
141
|
+
- GitHub repo → Actions tab
|
|
142
|
+
- Click workflow name to see runs
|
|
143
|
+
- Click run to see detailed logs
|
|
144
|
+
- Failed jobs show error messages
|
|
145
|
+
|
|
146
|
+
## Common Issues & Troubleshooting
|
|
147
|
+
|
|
148
|
+
### Issue: "Clippy warnings treated as errors"
|
|
149
|
+
**Solution:** Fix warnings before pushing. Run locally:
|
|
150
|
+
```bash
|
|
151
|
+
cargo clippy --all-targets --all-features -- -D warnings
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### Issue: "Format check failed"
|
|
155
|
+
**Solution:** Auto-format code:
|
|
156
|
+
```bash
|
|
157
|
+
cargo fmt
|
|
158
|
+
git add .
|
|
159
|
+
git commit -m "Format code"
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### Issue: "Security vulnerability detected"
|
|
163
|
+
**Solution:** Update affected dependency:
|
|
164
|
+
```bash
|
|
165
|
+
cargo update package-name
|
|
166
|
+
cargo test
|
|
167
|
+
git add Cargo.lock
|
|
168
|
+
git commit -m "Update vulnerable dependency"
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Issue: "PyPI publishing failed"
|
|
172
|
+
**Causes:**
|
|
173
|
+
- `PYPI_TOKEN` not configured in secrets
|
|
174
|
+
- Token expired or revoked
|
|
175
|
+
- Version already published (use `--skip-existing` flag)
|
|
176
|
+
- Package metadata invalid
|
|
177
|
+
|
|
178
|
+
**Debug:** Check workflow logs in Actions tab.
|
|
179
|
+
|
|
180
|
+
## Extending Workflows
|
|
181
|
+
|
|
182
|
+
### Add new test matrix:
|
|
183
|
+
Edit `ci.yml`, add OS/Rust version to matrix:
|
|
184
|
+
```yaml
|
|
185
|
+
strategy:
|
|
186
|
+
matrix:
|
|
187
|
+
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
188
|
+
rust: [stable, beta, nightly]
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### Add custom lint rule:
|
|
192
|
+
```yaml
|
|
193
|
+
- name: Custom Linter
|
|
194
|
+
run: |
|
|
195
|
+
cargo clippy --all-targets -- -W clippy::pedantic
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### Deploy documentation:
|
|
199
|
+
Add step to release workflow to publish docs to GitHub Pages.
|
|
200
|
+
|
|
201
|
+
## Best Practices
|
|
202
|
+
|
|
203
|
+
✅ **DO:**
|
|
204
|
+
- Run `cargo test` and `cargo clippy` locally before pushing
|
|
205
|
+
- Test on macOS if targeting Apple Silicon
|
|
206
|
+
- Keep dependencies updated
|
|
207
|
+
- Review security audit results weekly
|
|
208
|
+
- Use meaningful commit messages
|
|
209
|
+
|
|
210
|
+
❌ **DON'T:**
|
|
211
|
+
- Force-push to main (breaks workflow artifacts)
|
|
212
|
+
- Commit `Cargo.lock` changes carelessly (affects build reproducibility)
|
|
213
|
+
- Ignore security warnings
|
|
214
|
+
- Use `--skip-existing` to hide publishing errors
|
|
215
|
+
- Configure credentials in workflow files (use Secrets)
|
|
216
|
+
|
|
217
|
+
## References
|
|
218
|
+
|
|
219
|
+
- [GitHub Actions Documentation](https://docs.github.com/en/actions)
|
|
220
|
+
- [Rust Toolchain GitHub Action](https://github.com/dtolnay/rust-toolchain)
|
|
221
|
+
- [Maturin Documentation](https://maturin.rs/)
|
|
222
|
+
- [PyPI Token Setup](https://pypi.org/help/#apitoken)
|
|
223
|
+
- [RustSec Advisory Database](https://rustsec.org/)
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main, master, develop]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main, master, develop]
|
|
8
|
+
|
|
9
|
+
env:
|
|
10
|
+
CARGO_TERM_COLOR: always
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
test:
|
|
14
|
+
name: Test Suite
|
|
15
|
+
runs-on: ${{ matrix.os }}
|
|
16
|
+
strategy:
|
|
17
|
+
matrix:
|
|
18
|
+
os: [ubuntu-latest, macos-latest]
|
|
19
|
+
rust: [stable, beta]
|
|
20
|
+
steps:
|
|
21
|
+
- uses: actions/checkout@v4
|
|
22
|
+
|
|
23
|
+
- name: Install Rust
|
|
24
|
+
uses: dtolnay/rust-toolchain@master
|
|
25
|
+
with:
|
|
26
|
+
toolchain: ${{ matrix.rust }}
|
|
27
|
+
|
|
28
|
+
- name: Cache cargo registry
|
|
29
|
+
uses: actions/cache@v3
|
|
30
|
+
with:
|
|
31
|
+
path: ~/.cargo/registry
|
|
32
|
+
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
|
|
33
|
+
|
|
34
|
+
- name: Cache cargo index
|
|
35
|
+
uses: actions/cache@v3
|
|
36
|
+
with:
|
|
37
|
+
path: ~/.cargo/git
|
|
38
|
+
key: ${{ runner.os }}-cargo-git-${{ hashFiles('**/Cargo.lock') }}
|
|
39
|
+
|
|
40
|
+
- name: Cache cargo build
|
|
41
|
+
uses: actions/cache@v3
|
|
42
|
+
with:
|
|
43
|
+
path: target
|
|
44
|
+
key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }}
|
|
45
|
+
|
|
46
|
+
- name: Run tests
|
|
47
|
+
run: cargo test --lib --verbose
|
|
48
|
+
|
|
49
|
+
lint:
|
|
50
|
+
name: Clippy & Format
|
|
51
|
+
runs-on: ubuntu-latest
|
|
52
|
+
steps:
|
|
53
|
+
- uses: actions/checkout@v4
|
|
54
|
+
|
|
55
|
+
- name: Install Rust
|
|
56
|
+
uses: dtolnay/rust-toolchain@stable
|
|
57
|
+
with:
|
|
58
|
+
components: rustfmt, clippy
|
|
59
|
+
|
|
60
|
+
- name: Check formatting
|
|
61
|
+
run: cargo fmt -- --check
|
|
62
|
+
|
|
63
|
+
- name: Run clippy
|
|
64
|
+
run: cargo clippy --all-targets --all-features -- -D warnings
|
|
65
|
+
|
|
66
|
+
build:
|
|
67
|
+
name: Build Wheel
|
|
68
|
+
runs-on: ${{ matrix.os }}
|
|
69
|
+
strategy:
|
|
70
|
+
matrix:
|
|
71
|
+
os: [ubuntu-latest, macos-latest]
|
|
72
|
+
python-version: ['3.10', '3.11', '3.12', '3.13']
|
|
73
|
+
steps:
|
|
74
|
+
- uses: actions/checkout@v4
|
|
75
|
+
|
|
76
|
+
- name: Set up Python
|
|
77
|
+
uses: actions/setup-python@v4
|
|
78
|
+
with:
|
|
79
|
+
python-version: ${{ matrix.python-version }}
|
|
80
|
+
|
|
81
|
+
- name: Install Rust
|
|
82
|
+
uses: dtolnay/rust-toolchain@stable
|
|
83
|
+
|
|
84
|
+
- name: Install maturin
|
|
85
|
+
run: pip install maturin
|
|
86
|
+
|
|
87
|
+
- name: Build wheel
|
|
88
|
+
run: maturin build --release
|
|
89
|
+
|
|
90
|
+
- name: Upload wheels
|
|
91
|
+
uses: actions/upload-artifact@v3
|
|
92
|
+
with:
|
|
93
|
+
name: wheels-${{ matrix.os }}-py${{ matrix.python-version }}
|
|
94
|
+
path: target/wheels/
|
|
95
|
+
|
|
96
|
+
publish:
|
|
97
|
+
name: Publish to PyPI
|
|
98
|
+
needs: [test, lint, build]
|
|
99
|
+
runs-on: ubuntu-latest
|
|
100
|
+
if: startsWith(github.ref, 'refs/tags/v')
|
|
101
|
+
steps:
|
|
102
|
+
- uses: actions/checkout@v4
|
|
103
|
+
|
|
104
|
+
- name: Set up Python
|
|
105
|
+
uses: actions/setup-python@v4
|
|
106
|
+
with:
|
|
107
|
+
python-version: '3.11'
|
|
108
|
+
|
|
109
|
+
- name: Install Rust
|
|
110
|
+
uses: dtolnay/rust-toolchain@stable
|
|
111
|
+
|
|
112
|
+
- name: Install dependencies
|
|
113
|
+
run: |
|
|
114
|
+
python -m pip install --upgrade pip
|
|
115
|
+
pip install maturin twine
|
|
116
|
+
|
|
117
|
+
- name: Build wheels
|
|
118
|
+
run: maturin build --release
|
|
119
|
+
|
|
120
|
+
- name: Publish to PyPI
|
|
121
|
+
env:
|
|
122
|
+
TWINE_USERNAME: __token__
|
|
123
|
+
TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }}
|
|
124
|
+
run: |
|
|
125
|
+
twine upload target/wheels/* --skip-existing
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
name: Documentation
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main, master, develop]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main, master, develop]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
docs:
|
|
11
|
+
name: Build Documentation
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
steps:
|
|
14
|
+
- uses: actions/checkout@v4
|
|
15
|
+
|
|
16
|
+
- name: Install Rust
|
|
17
|
+
uses: dtolnay/rust-toolchain@stable
|
|
18
|
+
|
|
19
|
+
- name: Build docs
|
|
20
|
+
run: cargo doc --no-deps --document-private-items
|
|
21
|
+
|
|
22
|
+
- name: Check doc links
|
|
23
|
+
run: cargo doc --no-deps --document-private-items 2>&1 | grep -E "warning|error" || true
|
|
24
|
+
|
|
25
|
+
readme:
|
|
26
|
+
name: Validate README
|
|
27
|
+
runs-on: ubuntu-latest
|
|
28
|
+
steps:
|
|
29
|
+
- uses: actions/checkout@v4
|
|
30
|
+
|
|
31
|
+
- name: Check README exists
|
|
32
|
+
run: test -f README.md && echo "README.md found"
|
|
33
|
+
|
|
34
|
+
- name: Validate markdown
|
|
35
|
+
run: |
|
|
36
|
+
pip install markdownlint-cli
|
|
37
|
+
markdownlint README.md CLAUDE.md || true
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- 'v*'
|
|
7
|
+
|
|
8
|
+
env:
|
|
9
|
+
CARGO_TERM_COLOR: always
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
create-release:
|
|
13
|
+
name: Create GitHub Release
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
outputs:
|
|
16
|
+
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@v4
|
|
19
|
+
|
|
20
|
+
- name: Create Release
|
|
21
|
+
id: create_release
|
|
22
|
+
uses: actions/create-release@v1
|
|
23
|
+
env:
|
|
24
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
25
|
+
with:
|
|
26
|
+
tag_name: ${{ github.ref }}
|
|
27
|
+
release_name: Release ${{ github.ref }}
|
|
28
|
+
draft: false
|
|
29
|
+
prerelease: false
|
|
30
|
+
|
|
31
|
+
build-and-publish:
|
|
32
|
+
name: Build and Publish Wheel
|
|
33
|
+
needs: create-release
|
|
34
|
+
runs-on: ${{ matrix.os }}
|
|
35
|
+
strategy:
|
|
36
|
+
matrix:
|
|
37
|
+
os: [ubuntu-latest, macos-latest]
|
|
38
|
+
python-version: ['3.10', '3.11', '3.12', '3.13']
|
|
39
|
+
steps:
|
|
40
|
+
- uses: actions/checkout@v4
|
|
41
|
+
|
|
42
|
+
- name: Set up Python
|
|
43
|
+
uses: actions/setup-python@v4
|
|
44
|
+
with:
|
|
45
|
+
python-version: ${{ matrix.python-version }}
|
|
46
|
+
|
|
47
|
+
- name: Install Rust
|
|
48
|
+
uses: dtolnay/rust-toolchain@stable
|
|
49
|
+
|
|
50
|
+
- name: Install maturin
|
|
51
|
+
run: pip install maturin
|
|
52
|
+
|
|
53
|
+
- name: Build wheel
|
|
54
|
+
run: maturin build --release
|
|
55
|
+
|
|
56
|
+
- name: Upload Release Asset
|
|
57
|
+
uses: actions/upload-release-asset@v1
|
|
58
|
+
env:
|
|
59
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
60
|
+
with:
|
|
61
|
+
upload_url: ${{ needs.create-release.outputs.upload_url }}
|
|
62
|
+
asset_path: ./target/wheels/pyroboreplay-*.whl
|
|
63
|
+
asset_name: pyroboreplay-${{ github.ref }}-${{ matrix.os }}-py${{ matrix.python-version }}.whl
|
|
64
|
+
asset_content_type: application/zip
|
|
65
|
+
|
|
66
|
+
- name: Install dependencies
|
|
67
|
+
run: pip install twine
|
|
68
|
+
|
|
69
|
+
- name: Publish to PyPI
|
|
70
|
+
env:
|
|
71
|
+
TWINE_USERNAME: __token__
|
|
72
|
+
TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }}
|
|
73
|
+
run: |
|
|
74
|
+
twine upload target/wheels/pyroboreplay-*.whl --skip-existing
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
name: Security Audit
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main, master, develop]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main, master, develop]
|
|
8
|
+
schedule:
|
|
9
|
+
# Weekly security audit
|
|
10
|
+
- cron: '0 0 * * 0'
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
audit:
|
|
14
|
+
name: Cargo Audit
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v4
|
|
18
|
+
|
|
19
|
+
- name: Install Rust
|
|
20
|
+
uses: dtolnay/rust-toolchain@stable
|
|
21
|
+
|
|
22
|
+
- name: Install cargo-audit
|
|
23
|
+
run: cargo install cargo-audit
|
|
24
|
+
|
|
25
|
+
- name: Run security audit
|
|
26
|
+
run: cargo audit
|
|
27
|
+
|
|
28
|
+
dependencies:
|
|
29
|
+
name: Check Outdated Dependencies
|
|
30
|
+
runs-on: ubuntu-latest
|
|
31
|
+
steps:
|
|
32
|
+
- uses: actions/checkout@v4
|
|
33
|
+
|
|
34
|
+
- name: Install Rust
|
|
35
|
+
uses: dtolnay/rust-toolchain@stable
|
|
36
|
+
|
|
37
|
+
- name: Install cargo-outdated
|
|
38
|
+
run: cargo install cargo-outdated
|
|
39
|
+
|
|
40
|
+
- name: Check outdated dependencies
|
|
41
|
+
run: cargo outdated --format list
|
|
42
|
+
|
|
43
|
+
coverage:
|
|
44
|
+
name: Code Coverage
|
|
45
|
+
runs-on: ubuntu-latest
|
|
46
|
+
steps:
|
|
47
|
+
- uses: actions/checkout@v4
|
|
48
|
+
|
|
49
|
+
- name: Install Rust
|
|
50
|
+
uses: dtolnay/rust-toolchain@stable
|
|
51
|
+
|
|
52
|
+
- name: Install tarpaulin
|
|
53
|
+
run: cargo install cargo-tarpaulin
|
|
54
|
+
|
|
55
|
+
- name: Generate coverage
|
|
56
|
+
run: cargo tarpaulin --out Xml --exclude-files benches/* --timeout 600
|
|
57
|
+
continue-on-error: true
|
|
58
|
+
|
|
59
|
+
- name: Upload coverage to Codecov
|
|
60
|
+
uses: codecov/codecov-action@v3
|
|
61
|
+
with:
|
|
62
|
+
files: ./cobertura.xml
|
|
63
|
+
fail_ci_if_error: false
|
|
64
|
+
continue-on-error: true
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Sensitive files and credentials
|
|
2
|
+
.env
|
|
3
|
+
.env.local
|
|
4
|
+
.env.*.local
|
|
5
|
+
*.key
|
|
6
|
+
*.pem
|
|
7
|
+
*.crt
|
|
8
|
+
credentials.json
|
|
9
|
+
secrets.json
|
|
10
|
+
.credentials
|
|
11
|
+
config.local.*
|
|
12
|
+
.config.local
|
|
13
|
+
oauth_tokens.json
|
|
14
|
+
|
|
15
|
+
# IDE files
|
|
16
|
+
.vscode/
|
|
17
|
+
.idea/
|
|
18
|
+
*.swp
|
|
19
|
+
*~
|
|
20
|
+
.DS_Store
|
|
21
|
+
|
|
22
|
+
# Python
|
|
23
|
+
__pycache__/
|
|
24
|
+
*.py[cod]
|
|
25
|
+
*.egg-info/
|
|
26
|
+
dist/
|
|
27
|
+
build/
|
|
28
|
+
.pytest_cache/
|
|
29
|
+
|
|
30
|
+
# Virtual environments
|
|
31
|
+
venv/
|
|
32
|
+
env/
|
|
33
|
+
.venv
|
|
34
|
+
|
|
35
|
+
# Rust
|
|
36
|
+
target/
|
|
37
|
+
Cargo.lock
|
|
38
|
+
|
|
39
|
+
# Temp files
|
|
40
|
+
*.tmp
|
|
41
|
+
*.log
|
|
42
|
+
temp/
|
|
43
|
+
tmp/
|