roar-cli 0.2.3__tar.gz → 0.2.7__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.
- {roar_cli-0.2.3 → roar_cli-0.2.7}/PKG-INFO +91 -29
- roar_cli-0.2.3/roar_cli.egg-info/PKG-INFO → roar_cli-0.2.7/README.md +66 -51
- {roar_cli-0.2.3 → roar_cli-0.2.7}/pyproject.toml +21 -12
- roar_cli-0.2.7/roar/bin/libroar_tracer_preload.so +0 -0
- roar_cli-0.2.7/roar/bin/roar-proxy +0 -0
- roar_cli-0.2.7/roar/bin/roar-tracer +0 -0
- roar_cli-0.2.7/roar/bin/roar-tracer-ebpf +0 -0
- roar_cli-0.2.7/roar/bin/roar-tracer-preload +0 -0
- roar_cli-0.2.7/roar/bin/roard +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/cli/__init__.py +2 -0
- roar_cli-0.2.7/roar/cli/commands/__init__.py +70 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/cli/commands/_execution.py +62 -40
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/cli/commands/build.py +23 -2
- roar_cli-0.2.7/roar/cli/commands/dag.py +175 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/cli/commands/get.py +27 -22
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/cli/commands/init.py +65 -6
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/cli/commands/lineage.py +2 -20
- roar_cli-0.2.7/roar/cli/commands/proxy.py +130 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/cli/commands/put.py +61 -25
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/cli/commands/register.py +12 -2
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/cli/commands/reproduce.py +2 -1
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/cli/commands/run.py +28 -6
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/cli/commands/show.py +63 -220
- roar_cli-0.2.7/roar/cli/commands/tracer.py +304 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/cli/context.py +46 -35
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/config.py +168 -211
- roar_cli-0.2.7/roar/core/__init__.py +86 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/core/container.py +75 -22
- roar_cli-0.2.7/roar/core/digests.py +56 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/core/dto/registration.py +12 -4
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/core/interfaces/registration.py +12 -3
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/core/interfaces/repositories.py +19 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/core/interfaces/reproduction.py +11 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/core/interfaces/services.py +8 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/core/models/__init__.py +8 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/core/models/artifact.py +28 -14
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/core/models/base.py +2 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/core/models/config.py +42 -0
- roar_cli-0.2.7/roar/core/models/dataset_identifier.py +68 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/core/models/glaas.py +3 -1
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/core/models/job.py +48 -20
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/core/models/provenance.py +4 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/core/models/run.py +4 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/core/models/session.py +26 -11
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/core/settings.py +63 -1
- roar_cli-0.2.7/roar/core/tracer_modes.py +18 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/db/__init__.py +4 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/db/context.py +49 -8
- roar_cli-0.2.7/roar/db/hashing/__init__.py +17 -0
- roar_cli-0.2.7/roar/db/hashing/backend.py +181 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/db/models.py +83 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/db/repositories/__init__.py +2 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/db/repositories/artifact.py +3 -0
- roar_cli-0.2.7/roar/db/repositories/composite.py +149 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/db/repositories/job.py +154 -18
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/db/repositories/session.py +15 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/db/schema.py +115 -0
- roar_cli-0.2.7/roar/db/services/hashing.py +179 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/db/services/job_recording.py +74 -31
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/db/services/lineage.py +38 -26
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/filters/__init__.py +13 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/filters/files.py +19 -6
- roar_cli-0.2.7/roar/glaas/__init__.py +24 -0
- roar_cli-0.2.7/roar/glaas/auth.py +221 -0
- roar_cli-0.2.7/roar/glaas/transport.py +127 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/glaas_client.py +93 -370
- roar_cli-0.2.7/roar/presenters/__init__.py +14 -0
- roar_cli-0.2.7/roar/presenters/dag_data_builder.py +359 -0
- roar_cli-0.2.7/roar/presenters/null.py +36 -0
- roar_cli-0.2.7/roar/presenters/show_renderer.py +358 -0
- roar_cli-0.2.7/roar/presenters/spinner.py +60 -0
- roar_cli-0.2.7/roar/ray/__init__.py +6 -0
- roar_cli-0.2.7/roar/ray/_agent_names.py +7 -0
- roar_cli-0.2.7/roar/ray/actor.py +22 -0
- roar_cli-0.2.7/roar/ray/collector.py +999 -0
- roar_cli-0.2.7/roar/ray/fragment.py +50 -0
- roar_cli-0.2.7/roar/ray/node_agent.py +139 -0
- roar_cli-0.2.7/roar/ray/roar_worker.py +607 -0
- roar_cli-0.2.7/roar/ray/worker.py +550 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/execution/__init__.py +2 -0
- roar_cli-0.2.7/roar/services/execution/backup.py +71 -0
- roar_cli-0.2.7/roar/services/execution/coordinator.py +329 -0
- roar_cli-0.2.7/roar/services/execution/dataset_identifier.py +485 -0
- roar_cli-0.2.7/roar/services/execution/inject/sitecustomize.py +833 -0
- roar_cli-0.2.7/roar/services/execution/job_recording.py +711 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/execution/provenance/assembler.py +28 -5
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/execution/provenance/build_tool_collector.py +5 -0
- roar_cli-0.2.7/roar/services/execution/provenance/data_loader.py +197 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/execution/provenance/file_filter.py +101 -5
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/execution/provenance/package_collector.py +148 -60
- roar_cli-0.2.7/roar/services/execution/provenance/runtime_collector.py +498 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/execution/provenance/service.py +12 -4
- roar_cli-0.2.7/roar/services/execution/proxy.py +324 -0
- roar_cli-0.2.7/roar/services/execution/tracer.py +385 -0
- roar_cli-0.2.7/roar/services/execution/tracer_backends.py +276 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/get/service.py +54 -63
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/lookup/entity_lookup.py +17 -11
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/put/__init__.py +2 -0
- roar_cli-0.2.7/roar/services/put/composite_builder.py +321 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/put/resolver.py +53 -3
- roar_cli-0.2.7/roar/services/put/service.py +1563 -0
- roar_cli-0.2.7/roar/services/registration/_artifact_ref.py +110 -0
- roar_cli-0.2.7/roar/services/registration/_dataset_label.py +52 -0
- roar_cli-0.2.7/roar/services/registration/_dataset_profile.py +309 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/registration/artifact.py +23 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/registration/coordinator.py +99 -38
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/registration/job.py +176 -18
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/registration/register_service.py +287 -40
- roar_cli-0.2.7/roar/services/reproduction/environment_setup.py +580 -0
- roar_cli-0.2.7/roar/services/reproduction/installers.py +351 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/reproduction/pipeline_executor.py +9 -20
- roar_cli-0.2.7/roar/services/reproduction/pipeline_metadata.py +91 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/reproduction/service.py +62 -58
- roar_cli-0.2.7/roar/services/transfer/__init__.py +18 -0
- roar_cli-0.2.7/roar/services/transfer/backend_resolution.py +32 -0
- roar_cli-0.2.7/roar/services/transfer/common.py +83 -0
- roar_cli-0.2.7/roar/services/upload/lineage_collector.py +330 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/vcs/git_access.py +1 -1
- roar_cli-0.2.7/rust/Cargo.lock +3260 -0
- roar_cli-0.2.7/rust/Cargo.toml +19 -0
- roar_cli-0.2.7/rust/crates/artifact-hash-core/Cargo.toml +20 -0
- roar_cli-0.2.7/rust/crates/artifact-hash-core/src/lib.rs +345 -0
- roar_cli-0.2.7/rust/crates/artifact-hash-py/Cargo.toml +22 -0
- roar_cli-0.2.7/rust/crates/artifact-hash-py/src/lib.rs +67 -0
- roar_cli-0.2.3/README.md +0 -423
- roar_cli-0.2.3/roar/bin/roar-tracer +0 -0
- roar_cli-0.2.3/roar/cli/commands/__init__.py +0 -71
- roar_cli-0.2.3/roar/cli/commands/dag.py +0 -449
- roar_cli-0.2.3/roar/core/__init__.py +0 -62
- roar_cli-0.2.3/roar/db/hashing/__init__.py +0 -25
- roar_cli-0.2.3/roar/db/hashing/registry.py +0 -121
- roar_cli-0.2.3/roar/db/hashing/strategies.py +0 -94
- roar_cli-0.2.3/roar/db/services/hashing.py +0 -187
- roar_cli-0.2.3/roar/db/storage.py +0 -143
- roar_cli-0.2.3/roar/presenters/__init__.py +0 -11
- roar_cli-0.2.3/roar/services/execution/coordinator.py +0 -423
- roar_cli-0.2.3/roar/services/execution/inject/sitecustomize.py +0 -203
- roar_cli-0.2.3/roar/services/execution/provenance/data_loader.py +0 -97
- roar_cli-0.2.3/roar/services/execution/provenance/runtime_collector.py +0 -311
- roar_cli-0.2.3/roar/services/execution/tracer.py +0 -190
- roar_cli-0.2.3/roar/services/put/service.py +0 -511
- roar_cli-0.2.3/roar/services/reproduction/environment_setup.py +0 -967
- roar_cli-0.2.3/roar/services/upload/lineage_collector.py +0 -200
- roar_cli-0.2.3/roar_cli.egg-info/SOURCES.txt +0 -180
- roar_cli-0.2.3/roar_cli.egg-info/dependency_links.txt +0 -1
- roar_cli-0.2.3/roar_cli.egg-info/entry_points.txt +0 -2
- roar_cli-0.2.3/roar_cli.egg-info/requires.txt +0 -21
- roar_cli-0.2.3/roar_cli.egg-info/top_level.txt +0 -1
- roar_cli-0.2.3/setup.cfg +0 -4
- roar_cli-0.2.3/setup.py +0 -90
- roar_cli-0.2.3/tests/test_config.py +0 -362
- {roar_cli-0.2.3 → roar_cli-0.2.7}/LICENSE +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/__init__.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/__main__.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/analyzers/__init__.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/analyzers/base.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/analyzers/experiment_trackers.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/cli/commands/auth.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/cli/commands/config.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/cli/commands/env.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/cli/commands/log.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/cli/commands/pop.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/cli/commands/reset.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/cli/commands/status.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/cli/decorators.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/core/bootstrap.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/core/di.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/core/dto/__init__.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/core/exceptions.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/core/interfaces/__init__.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/core/interfaces/cloud.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/core/interfaces/command.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/core/interfaces/config.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/core/interfaces/logger.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/core/interfaces/presenter.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/core/interfaces/provenance.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/core/interfaces/run.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/core/interfaces/telemetry.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/core/interfaces/upload.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/core/interfaces/vcs.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/core/logging.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/core/models/command.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/core/models/dag.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/core/models/lineage.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/core/models/telemetry.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/core/models/vcs.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/core/registry.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/core/validation.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/db/engine.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/db/repositories/collection.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/db/repositories/hash_cache.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/db/services/__init__.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/db/services/session.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/filters/omit.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/plugins/__init__.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/plugins/cloud/__init__.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/plugins/cloud/base.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/plugins/telemetry/__init__.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/plugins/telemetry/base.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/plugins/telemetry/wandb.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/plugins/vcs/__init__.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/plugins/vcs/base.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/plugins/vcs/git.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/presenters/console.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/presenters/dag_renderer.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/presenters/formatting.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/presenters/run_report.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/__init__.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/execution/args.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/execution/dag_resolver.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/execution/execution_service.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/execution/inject/__init__.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/execution/provenance/__init__.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/execution/provenance/build_pip_collector.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/execution/provenance/process_summarizer.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/execution/signal_handler.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/get/__init__.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/get/backends/__init__.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/get/backends/base.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/get/backends/gcs.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/get/backends/http.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/get/backends/noop.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/get/backends/s3.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/logging.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/lookup/__init__.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/lookup/step_parser.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/put/backends/__init__.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/put/backends/base.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/put/backends/gcs.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/put/backends/memory.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/put/backends/noop.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/put/backends/s3.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/put/git.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/registration/__init__.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/registration/session.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/reproduction/__init__.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/secrets/__init__.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/secrets/filter_service.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/upload/__init__.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/upload/service.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/services/vcs/__init__.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/utils/__init__.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/utils/cloud.py +0 -0
- {roar_cli-0.2.3 → roar_cli-0.2.7}/roar/utils/git_url.py +0 -0
|
@@ -1,14 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: roar-cli
|
|
3
|
-
Version: 0.2.
|
|
4
|
-
Summary: Reproducibility and provenance tracker for ML training pipelines
|
|
5
|
-
Author-email: TReqs Team <info@treqs.ai>
|
|
6
|
-
License-Expression: Apache-2.0
|
|
7
|
-
Project-URL: Homepage, https://github.com/treqs/roar
|
|
8
|
-
Project-URL: Repository, https://github.com/treqs/roar
|
|
9
|
-
Project-URL: Documentation, https://github.com/treqs/roar#readme
|
|
10
|
-
Project-URL: Issues, https://github.com/treqs/roar/issues
|
|
11
|
-
Keywords: machine-learning,reproducibility,lineage,provenance,mlops,data-versioning,artifact-tracking
|
|
3
|
+
Version: 0.2.7
|
|
12
4
|
Classifier: Development Status :: 3 - Alpha
|
|
13
5
|
Classifier: Intended Audience :: Developers
|
|
14
6
|
Classifier: Intended Audience :: Science/Research
|
|
@@ -21,28 +13,36 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
21
13
|
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
22
14
|
Classifier: Topic :: Software Development :: Version Control
|
|
23
15
|
Classifier: Typing :: Typed
|
|
24
|
-
Requires-Python: >=3.10
|
|
25
|
-
Description-Content-Type: text/markdown
|
|
26
|
-
License-File: LICENSE
|
|
27
16
|
Requires-Dist: blake3>=0.3.0
|
|
28
17
|
Requires-Dist: click>=8.1.0
|
|
29
18
|
Requires-Dist: dependency-injector>=4.40.0
|
|
19
|
+
Requires-Dist: msgpack>=1.0.0
|
|
30
20
|
Requires-Dist: sqlalchemy>=2.0.0
|
|
31
|
-
Requires-Dist: pysqlite3-binary>=0.5.0
|
|
21
|
+
Requires-Dist: pysqlite3-binary>=0.5.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'
|
|
32
22
|
Requires-Dist: pydantic>=2.0.0
|
|
33
23
|
Requires-Dist: pydantic-settings>=2.0.0
|
|
34
|
-
Requires-Dist: tomli>=2.0.0;
|
|
24
|
+
Requires-Dist: tomli>=2.0.0 ; python_full_version < '3.11'
|
|
25
|
+
Requires-Dist: pytest>=7.0.0 ; extra == 'dev'
|
|
26
|
+
Requires-Dist: pytest-timeout>=2.0.0 ; extra == 'dev'
|
|
27
|
+
Requires-Dist: pytest-mock>=3.10.0 ; extra == 'dev'
|
|
28
|
+
Requires-Dist: pytest-cov>=4.0.0 ; extra == 'dev'
|
|
29
|
+
Requires-Dist: pytest-xdist>=3.5.0 ; extra == 'dev'
|
|
30
|
+
Requires-Dist: ruff>=0.8.0 ; extra == 'dev'
|
|
31
|
+
Requires-Dist: mypy>=1.13.0 ; extra == 'dev'
|
|
32
|
+
Requires-Dist: boto3>=1.28.0 ; extra == 'dev'
|
|
33
|
+
Requires-Dist: google-cloud-storage>=2.10.0 ; extra == 'dev'
|
|
35
34
|
Provides-Extra: dev
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
Requires-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
35
|
+
License-File: LICENSE
|
|
36
|
+
Summary: Reproducibility and provenance tracker for ML training pipelines
|
|
37
|
+
Keywords: machine-learning,reproducibility,lineage,provenance,mlops,data-versioning,artifact-tracking
|
|
38
|
+
Author-email: TReqs Team <info@treqs.ai>
|
|
39
|
+
License-Expression: Apache-2.0
|
|
40
|
+
Requires-Python: >=3.10
|
|
41
|
+
Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
|
|
42
|
+
Project-URL: Documentation, https://github.com/treqs/roar#readme
|
|
43
|
+
Project-URL: Homepage, https://github.com/treqs/roar
|
|
44
|
+
Project-URL: Issues, https://github.com/treqs/roar/issues
|
|
45
|
+
Project-URL: Repository, https://github.com/treqs/roar
|
|
46
46
|
|
|
47
47
|
# roar
|
|
48
48
|
|
|
@@ -62,7 +62,7 @@ pip install roar-cli
|
|
|
62
62
|
uv pip install roar-cli
|
|
63
63
|
```
|
|
64
64
|
|
|
65
|
-
Requires Python 3.10
|
|
65
|
+
Requires Python 3.10+.
|
|
66
66
|
|
|
67
67
|
### Platform Support
|
|
68
68
|
|
|
@@ -70,10 +70,10 @@ Requires Python 3.10+ and Linux (x86_64 or aarch64).
|
|
|
70
70
|
| ------------- | -------------- |
|
|
71
71
|
| Linux x86_64 | ✅ Full support |
|
|
72
72
|
| Linux aarch64 | ✅ Full support |
|
|
73
|
-
| macOS |
|
|
73
|
+
| macOS | 🚧 Experimental ([limitations](#macos-tracing-limitations)) |
|
|
74
74
|
| Windows | Coming soon |
|
|
75
75
|
|
|
76
|
-
|
|
76
|
+
PyPI wheels are published for Linux and macOS (`x86_64` and `arm64`).
|
|
77
77
|
|
|
78
78
|
### Development Installation
|
|
79
79
|
|
|
@@ -82,7 +82,7 @@ macOS and Windows support are planned for future releases.
|
|
|
82
82
|
git clone https://github.com/treqs/roar.git
|
|
83
83
|
cd roar
|
|
84
84
|
|
|
85
|
-
# Install in development mode
|
|
85
|
+
# Install in development mode
|
|
86
86
|
uv pip install -e ".[dev]"
|
|
87
87
|
# or without uv
|
|
88
88
|
pip install -e ".[dev]"
|
|
@@ -101,6 +101,67 @@ roar run python train.py --data features.parquet --output model.pt
|
|
|
101
101
|
roar run python evaluate.py --model model.pt --output metrics.json
|
|
102
102
|
```
|
|
103
103
|
|
|
104
|
+
## Tracer Backends
|
|
105
|
+
|
|
106
|
+
`roar run` relies on a Rust "tracer" binary to observe file I/O. If you see an error like "No tracer binary found", build one of the backends below.
|
|
107
|
+
|
|
108
|
+
### Backends
|
|
109
|
+
|
|
110
|
+
| Backend | Binary | Platforms | Notes |
|
|
111
|
+
| --- | --- | --- | --- |
|
|
112
|
+
| eBPF | `roar-tracer-ebpf` | Linux | Fastest, but requires permissions and kernel support. |
|
|
113
|
+
| preload | `roar-tracer-preload` + `libroar_tracer_preload` | macOS, Linux | Uses `DYLD_INSERT_LIBRARIES` (macOS) or `LD_PRELOAD` (Linux). Not compatible with processes that ignore preload env vars (e.g., SIP/hardened runtime on macOS), or fully-static binaries (common with Go). |
|
|
114
|
+
| ptrace | `roar-tracer` | Linux | Slowest, broadest compatibility on Linux. |
|
|
115
|
+
|
|
116
|
+
### Building
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
cd rust
|
|
120
|
+
|
|
121
|
+
# eBPF (Linux)
|
|
122
|
+
cargo build --release -p roar-tracer-ebpf
|
|
123
|
+
|
|
124
|
+
# preload (macOS & Linux)
|
|
125
|
+
cargo build --release -p roar-tracer-preload
|
|
126
|
+
|
|
127
|
+
# ptrace (Linux)
|
|
128
|
+
cargo build --release -p roar-tracer
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Selecting A Backend
|
|
132
|
+
|
|
133
|
+
By default, `roar` uses `auto` mode: prefer eBPF, then preload, then ptrace.
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
# Show what roar can currently find and whether it looks usable
|
|
137
|
+
roar tracer status
|
|
138
|
+
|
|
139
|
+
# Set a default backend (auto|ebpf|preload|ptrace)
|
|
140
|
+
roar tracer set-default preload
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### macOS Tracing Limitations
|
|
144
|
+
|
|
145
|
+
On macOS, `roar` uses the `preload` backend (`DYLD_INSERT_LIBRARIES`). macOS System Integrity Protection (SIP) silently blocks library injection for Apple-signed platform binaries — anything under `/usr/bin/`, `/bin/`, `/sbin/`, or `/System/`. When this happens, `roar run` will complete successfully but capture no file I/O events.
|
|
146
|
+
|
|
147
|
+
**Affected:** `/usr/bin/python3`, `/bin/sh`, `/usr/bin/ruby`, and all other Apple-shipped binaries.
|
|
148
|
+
|
|
149
|
+
**Workaround:** Use non-Apple builds of your tools:
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
# Homebrew
|
|
153
|
+
brew install python3
|
|
154
|
+
roar run python3 train.py # Uses /opt/homebrew/bin/python3 — works
|
|
155
|
+
|
|
156
|
+
# conda / pyenv / nix also work
|
|
157
|
+
roar run ~/.pyenv/shims/python train.py
|
|
158
|
+
|
|
159
|
+
# This will NOT capture file events (SIP blocks it):
|
|
160
|
+
roar run /usr/bin/python3 train.py
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
`roar` prints a warning when it detects no events were captured from a SIP-protected binary.
|
|
164
|
+
|
|
104
165
|
## Commands
|
|
105
166
|
|
|
106
167
|
### `roar init`
|
|
@@ -428,7 +489,7 @@ roar auth test
|
|
|
428
489
|
### Setup
|
|
429
490
|
|
|
430
491
|
```bash
|
|
431
|
-
# Install dev dependencies
|
|
492
|
+
# Install dev dependencies
|
|
432
493
|
uv pip install -e ".[dev]"
|
|
433
494
|
```
|
|
434
495
|
|
|
@@ -467,3 +528,4 @@ pytest tests/ -v -m "not integration and not e2e and not glaas and not live_glaa
|
|
|
467
528
|
## License
|
|
468
529
|
|
|
469
530
|
Apache 2.0
|
|
531
|
+
|
|
@@ -1,49 +1,3 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: roar-cli
|
|
3
|
-
Version: 0.2.3
|
|
4
|
-
Summary: Reproducibility and provenance tracker for ML training pipelines
|
|
5
|
-
Author-email: TReqs Team <info@treqs.ai>
|
|
6
|
-
License-Expression: Apache-2.0
|
|
7
|
-
Project-URL: Homepage, https://github.com/treqs/roar
|
|
8
|
-
Project-URL: Repository, https://github.com/treqs/roar
|
|
9
|
-
Project-URL: Documentation, https://github.com/treqs/roar#readme
|
|
10
|
-
Project-URL: Issues, https://github.com/treqs/roar/issues
|
|
11
|
-
Keywords: machine-learning,reproducibility,lineage,provenance,mlops,data-versioning,artifact-tracking
|
|
12
|
-
Classifier: Development Status :: 3 - Alpha
|
|
13
|
-
Classifier: Intended Audience :: Developers
|
|
14
|
-
Classifier: Intended Audience :: Science/Research
|
|
15
|
-
Classifier: Operating System :: OS Independent
|
|
16
|
-
Classifier: Programming Language :: Python :: 3
|
|
17
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
-
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
-
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
22
|
-
Classifier: Topic :: Software Development :: Version Control
|
|
23
|
-
Classifier: Typing :: Typed
|
|
24
|
-
Requires-Python: >=3.10
|
|
25
|
-
Description-Content-Type: text/markdown
|
|
26
|
-
License-File: LICENSE
|
|
27
|
-
Requires-Dist: blake3>=0.3.0
|
|
28
|
-
Requires-Dist: click>=8.1.0
|
|
29
|
-
Requires-Dist: dependency-injector>=4.40.0
|
|
30
|
-
Requires-Dist: sqlalchemy>=2.0.0
|
|
31
|
-
Requires-Dist: pysqlite3-binary>=0.5.0
|
|
32
|
-
Requires-Dist: pydantic>=2.0.0
|
|
33
|
-
Requires-Dist: pydantic-settings>=2.0.0
|
|
34
|
-
Requires-Dist: tomli>=2.0.0; python_version < "3.11"
|
|
35
|
-
Provides-Extra: dev
|
|
36
|
-
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
37
|
-
Requires-Dist: pytest-timeout>=2.0.0; extra == "dev"
|
|
38
|
-
Requires-Dist: pytest-mock>=3.10.0; extra == "dev"
|
|
39
|
-
Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
|
|
40
|
-
Requires-Dist: pytest-xdist>=3.5.0; extra == "dev"
|
|
41
|
-
Requires-Dist: ruff>=0.8.0; extra == "dev"
|
|
42
|
-
Requires-Dist: mypy>=1.13.0; extra == "dev"
|
|
43
|
-
Requires-Dist: boto3>=1.28.0; extra == "dev"
|
|
44
|
-
Requires-Dist: google-cloud-storage>=2.10.0; extra == "dev"
|
|
45
|
-
Dynamic: license-file
|
|
46
|
-
|
|
47
1
|
# roar
|
|
48
2
|
|
|
49
3
|
**Run Observation & Artifact Registration**
|
|
@@ -62,7 +16,7 @@ pip install roar-cli
|
|
|
62
16
|
uv pip install roar-cli
|
|
63
17
|
```
|
|
64
18
|
|
|
65
|
-
Requires Python 3.10
|
|
19
|
+
Requires Python 3.10+.
|
|
66
20
|
|
|
67
21
|
### Platform Support
|
|
68
22
|
|
|
@@ -70,10 +24,10 @@ Requires Python 3.10+ and Linux (x86_64 or aarch64).
|
|
|
70
24
|
| ------------- | -------------- |
|
|
71
25
|
| Linux x86_64 | ✅ Full support |
|
|
72
26
|
| Linux aarch64 | ✅ Full support |
|
|
73
|
-
| macOS |
|
|
27
|
+
| macOS | 🚧 Experimental ([limitations](#macos-tracing-limitations)) |
|
|
74
28
|
| Windows | Coming soon |
|
|
75
29
|
|
|
76
|
-
|
|
30
|
+
PyPI wheels are published for Linux and macOS (`x86_64` and `arm64`).
|
|
77
31
|
|
|
78
32
|
### Development Installation
|
|
79
33
|
|
|
@@ -82,7 +36,7 @@ macOS and Windows support are planned for future releases.
|
|
|
82
36
|
git clone https://github.com/treqs/roar.git
|
|
83
37
|
cd roar
|
|
84
38
|
|
|
85
|
-
# Install in development mode
|
|
39
|
+
# Install in development mode
|
|
86
40
|
uv pip install -e ".[dev]"
|
|
87
41
|
# or without uv
|
|
88
42
|
pip install -e ".[dev]"
|
|
@@ -101,6 +55,67 @@ roar run python train.py --data features.parquet --output model.pt
|
|
|
101
55
|
roar run python evaluate.py --model model.pt --output metrics.json
|
|
102
56
|
```
|
|
103
57
|
|
|
58
|
+
## Tracer Backends
|
|
59
|
+
|
|
60
|
+
`roar run` relies on a Rust "tracer" binary to observe file I/O. If you see an error like "No tracer binary found", build one of the backends below.
|
|
61
|
+
|
|
62
|
+
### Backends
|
|
63
|
+
|
|
64
|
+
| Backend | Binary | Platforms | Notes |
|
|
65
|
+
| --- | --- | --- | --- |
|
|
66
|
+
| eBPF | `roar-tracer-ebpf` | Linux | Fastest, but requires permissions and kernel support. |
|
|
67
|
+
| preload | `roar-tracer-preload` + `libroar_tracer_preload` | macOS, Linux | Uses `DYLD_INSERT_LIBRARIES` (macOS) or `LD_PRELOAD` (Linux). Not compatible with processes that ignore preload env vars (e.g., SIP/hardened runtime on macOS), or fully-static binaries (common with Go). |
|
|
68
|
+
| ptrace | `roar-tracer` | Linux | Slowest, broadest compatibility on Linux. |
|
|
69
|
+
|
|
70
|
+
### Building
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
cd rust
|
|
74
|
+
|
|
75
|
+
# eBPF (Linux)
|
|
76
|
+
cargo build --release -p roar-tracer-ebpf
|
|
77
|
+
|
|
78
|
+
# preload (macOS & Linux)
|
|
79
|
+
cargo build --release -p roar-tracer-preload
|
|
80
|
+
|
|
81
|
+
# ptrace (Linux)
|
|
82
|
+
cargo build --release -p roar-tracer
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Selecting A Backend
|
|
86
|
+
|
|
87
|
+
By default, `roar` uses `auto` mode: prefer eBPF, then preload, then ptrace.
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
# Show what roar can currently find and whether it looks usable
|
|
91
|
+
roar tracer status
|
|
92
|
+
|
|
93
|
+
# Set a default backend (auto|ebpf|preload|ptrace)
|
|
94
|
+
roar tracer set-default preload
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### macOS Tracing Limitations
|
|
98
|
+
|
|
99
|
+
On macOS, `roar` uses the `preload` backend (`DYLD_INSERT_LIBRARIES`). macOS System Integrity Protection (SIP) silently blocks library injection for Apple-signed platform binaries — anything under `/usr/bin/`, `/bin/`, `/sbin/`, or `/System/`. When this happens, `roar run` will complete successfully but capture no file I/O events.
|
|
100
|
+
|
|
101
|
+
**Affected:** `/usr/bin/python3`, `/bin/sh`, `/usr/bin/ruby`, and all other Apple-shipped binaries.
|
|
102
|
+
|
|
103
|
+
**Workaround:** Use non-Apple builds of your tools:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
# Homebrew
|
|
107
|
+
brew install python3
|
|
108
|
+
roar run python3 train.py # Uses /opt/homebrew/bin/python3 — works
|
|
109
|
+
|
|
110
|
+
# conda / pyenv / nix also work
|
|
111
|
+
roar run ~/.pyenv/shims/python train.py
|
|
112
|
+
|
|
113
|
+
# This will NOT capture file events (SIP blocks it):
|
|
114
|
+
roar run /usr/bin/python3 train.py
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
`roar` prints a warning when it detects no events were captured from a SIP-protected binary.
|
|
118
|
+
|
|
104
119
|
## Commands
|
|
105
120
|
|
|
106
121
|
### `roar init`
|
|
@@ -428,7 +443,7 @@ roar auth test
|
|
|
428
443
|
### Setup
|
|
429
444
|
|
|
430
445
|
```bash
|
|
431
|
-
# Install dev dependencies
|
|
446
|
+
# Install dev dependencies
|
|
432
447
|
uv pip install -e ".[dev]"
|
|
433
448
|
```
|
|
434
449
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
[build-system]
|
|
2
|
-
requires = ["
|
|
3
|
-
build-backend = "
|
|
2
|
+
requires = ["maturin>=1.11.5,<2.0"]
|
|
3
|
+
build-backend = "maturin"
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "roar-cli"
|
|
7
|
-
version = "0.2.
|
|
7
|
+
version = "0.2.7"
|
|
8
8
|
description = "Reproducibility and provenance tracker for ML training pipelines"
|
|
9
9
|
authors = [
|
|
10
10
|
{ name="TReqs Team", email="info@treqs.ai" }
|
|
@@ -39,8 +39,9 @@ dependencies = [
|
|
|
39
39
|
"blake3>=0.3.0",
|
|
40
40
|
"click>=8.1.0",
|
|
41
41
|
"dependency-injector>=4.40.0",
|
|
42
|
+
"msgpack>=1.0.0",
|
|
42
43
|
"sqlalchemy>=2.0.0",
|
|
43
|
-
"pysqlite3-binary>=0.5.0", # Fallback when stdlib sqlite3 unavailable
|
|
44
|
+
"pysqlite3-binary>=0.5.0; sys_platform == 'linux' and platform_machine == 'x86_64'", # Fallback when stdlib sqlite3 unavailable
|
|
44
45
|
"pydantic>=2.0.0",
|
|
45
46
|
"pydantic-settings>=2.0.0",
|
|
46
47
|
"tomli>=2.0.0; python_version < '3.11'",
|
|
@@ -68,28 +69,36 @@ dev = [
|
|
|
68
69
|
[project.scripts]
|
|
69
70
|
# This registers `roar` on PATH after pip install
|
|
70
71
|
roar = "roar.__main__:main"
|
|
72
|
+
roar-worker = "roar.ray.roar_worker:main"
|
|
71
73
|
|
|
72
|
-
[tool.
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
74
|
+
[tool.maturin]
|
|
75
|
+
manifest-path = "rust/crates/artifact-hash-py/Cargo.toml"
|
|
76
|
+
python-source = "."
|
|
77
|
+
module-name = "roar._hash_native"
|
|
78
|
+
bindings = "pyo3"
|
|
79
|
+
include = [
|
|
80
|
+
{ path = "LICENSE", format = "sdist" },
|
|
81
|
+
{ path = "LICENSE", format = "wheel" },
|
|
82
|
+
{ path = "roar/bin/*", format = "sdist" },
|
|
83
|
+
{ path = "roar/bin/*", format = "wheel" },
|
|
84
|
+
]
|
|
78
85
|
|
|
79
86
|
[tool.pytest.ini_options]
|
|
80
87
|
# Parallel execution enabled by default with pytest-xdist
|
|
81
88
|
# - Uses --dist loadfile to keep same-file tests in same worker (avoids cwd race conditions)
|
|
82
|
-
# -
|
|
89
|
+
# - Default profile excludes tests requiring root/eBPF and live GLaaS dependencies
|
|
83
90
|
testpaths = ["tests"]
|
|
84
91
|
markers = [
|
|
85
92
|
"integration: Integration tests (uses fixtures)",
|
|
86
93
|
"e2e: End-to-end tests (full workflows)",
|
|
87
94
|
"glaas: Tests requiring GLaaS server",
|
|
88
95
|
"live_glaas: Tests requiring live GLaaS API running locally",
|
|
96
|
+
"ebpf: Tests requiring eBPF daemon/root privileges",
|
|
89
97
|
"cloud: Tests for cloud storage operations",
|
|
90
98
|
"happy_path: Happy path tests for core functionality",
|
|
99
|
+
"ray_e2e: Ray end-to-end tests requiring a running Docker cluster",
|
|
91
100
|
]
|
|
92
|
-
addopts = "-v --strict-markers -n auto --dist loadfile"
|
|
101
|
+
addopts = "-v --strict-markers -n auto --dist loadfile --ignore=tests/ebpf --ignore=tests/live_glaas --ignore=tests/benchmarks --ignore=tests/integration --ignore=tests/e2e"
|
|
93
102
|
timeout = 60
|
|
94
103
|
filterwarnings = [
|
|
95
104
|
"ignore::DeprecationWarning",
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -38,6 +38,7 @@ LAZY_COMMANDS: dict[str, tuple[str, str, str]] = {
|
|
|
38
38
|
"lineage": ("roar.cli.commands.lineage", "lineage", "Show lineage for an artifact"),
|
|
39
39
|
"log": ("roar.cli.commands.log", "log", "Show execution log"),
|
|
40
40
|
"pop": ("roar.cli.commands.pop", "pop", "Pop the last step from the session"),
|
|
41
|
+
"proxy": ("roar.cli.commands.proxy", "proxy", "Manage S3 proxy for lineage tracking"),
|
|
41
42
|
"put": ("roar.cli.commands.put", "put", "Publish artifacts to cloud storage"),
|
|
42
43
|
"register": ("roar.cli.commands.register", "register", "Register artifacts or jobs"),
|
|
43
44
|
"reproduce": ("roar.cli.commands.reproduce", "reproduce", "Reproduce an artifact"),
|
|
@@ -45,6 +46,7 @@ LAZY_COMMANDS: dict[str, tuple[str, str, str]] = {
|
|
|
45
46
|
"run": ("roar.cli.commands.run", "run", "Run a command with provenance tracking"),
|
|
46
47
|
"show": ("roar.cli.commands.show", "show", "Show details of a job or artifact"),
|
|
47
48
|
"status": ("roar.cli.commands.status", "status", "Show current session status"),
|
|
49
|
+
"tracer": ("roar.cli.commands.tracer", "tracer", "Manage tracer backend defaults"),
|
|
48
50
|
}
|
|
49
51
|
|
|
50
52
|
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Click command implementations for roar CLI.
|
|
3
|
+
|
|
4
|
+
This package contains the Click-based command implementations that
|
|
5
|
+
replace the legacy command classes. Each module corresponds to a
|
|
6
|
+
roar command (e.g., run.py implements 'roar run').
|
|
7
|
+
|
|
8
|
+
Commands are lazily imported via the LazyCommand mechanism in roar.cli.
|
|
9
|
+
This __init__ defers all imports to avoid loading every command module
|
|
10
|
+
when only one command is invoked.
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from __future__ import annotations
|
|
14
|
+
|
|
15
|
+
from typing import TYPE_CHECKING
|
|
16
|
+
|
|
17
|
+
if TYPE_CHECKING:
|
|
18
|
+
import click
|
|
19
|
+
|
|
20
|
+
_COMMAND_MODULES: dict[str, tuple[str, str]] = {
|
|
21
|
+
"auth": (".auth", "auth"),
|
|
22
|
+
"build": (".build", "build"),
|
|
23
|
+
"config": (".config", "config"),
|
|
24
|
+
"dag": (".dag", "dag"),
|
|
25
|
+
"env": (".env", "env"),
|
|
26
|
+
"get": (".get", "get"),
|
|
27
|
+
"init": (".init", "init"),
|
|
28
|
+
"lineage": (".lineage", "lineage"),
|
|
29
|
+
"log": (".log", "log"),
|
|
30
|
+
"pop": (".pop", "pop"),
|
|
31
|
+
"put": (".put", "put"),
|
|
32
|
+
"register": (".register", "register"),
|
|
33
|
+
"reproduce": (".reproduce", "reproduce"),
|
|
34
|
+
"reset": (".reset", "reset"),
|
|
35
|
+
"run": (".run", "run"),
|
|
36
|
+
"show": (".show", "show"),
|
|
37
|
+
"status": (".status", "status"),
|
|
38
|
+
"tracer": (".tracer", "tracer"),
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def get_migrated_commands() -> list[click.Command]:
|
|
43
|
+
"""Import and return all command objects (used by legacy registration paths)."""
|
|
44
|
+
import importlib
|
|
45
|
+
|
|
46
|
+
commands = []
|
|
47
|
+
for module_path, attr_name in _COMMAND_MODULES.values():
|
|
48
|
+
mod = importlib.import_module(module_path, __name__)
|
|
49
|
+
commands.append(getattr(mod, attr_name))
|
|
50
|
+
return commands
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def __getattr__(name: str):
|
|
54
|
+
if name == "MIGRATED_COMMANDS":
|
|
55
|
+
return get_migrated_commands()
|
|
56
|
+
if name in _COMMAND_MODULES:
|
|
57
|
+
import importlib
|
|
58
|
+
|
|
59
|
+
module_path, attr_name = _COMMAND_MODULES[name]
|
|
60
|
+
mod = importlib.import_module(module_path, __name__)
|
|
61
|
+
value = getattr(mod, attr_name)
|
|
62
|
+
globals()[name] = value
|
|
63
|
+
return value
|
|
64
|
+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
__all__ = [
|
|
68
|
+
"MIGRATED_COMMANDS",
|
|
69
|
+
*_COMMAND_MODULES.keys(),
|
|
70
|
+
]
|
|
@@ -19,39 +19,47 @@ if TYPE_CHECKING:
|
|
|
19
19
|
from ..context import RoarContext
|
|
20
20
|
|
|
21
21
|
|
|
22
|
-
def validate_git_clean() ->
|
|
22
|
+
def validate_git_clean() -> str:
|
|
23
23
|
"""
|
|
24
|
-
Validate git repository is clean and return
|
|
24
|
+
Validate git repository is clean and return repo root.
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
Lightweight pre-fork check using git subprocesses directly, avoiding
|
|
27
|
+
the heavy bootstrap/import cascade. Git info (commit, branch, etc.)
|
|
28
|
+
is collected by the ProvenanceService after the fork.
|
|
29
29
|
|
|
30
30
|
Returns:
|
|
31
|
-
|
|
32
|
-
- commit: Current commit hash
|
|
33
|
-
- branch: Current branch name
|
|
34
|
-
- remote_url: Remote origin URL
|
|
31
|
+
Repository root path
|
|
35
32
|
|
|
36
33
|
Raises:
|
|
37
34
|
click.ClickException: If not in a git repo or has uncommitted changes
|
|
38
35
|
"""
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
36
|
+
import subprocess
|
|
37
|
+
|
|
38
|
+
# Find repo root (no bootstrap needed)
|
|
39
|
+
try:
|
|
40
|
+
repo_root = subprocess.check_output(
|
|
41
|
+
["git", "rev-parse", "--show-toplevel"],
|
|
42
|
+
stderr=subprocess.DEVNULL,
|
|
43
|
+
text=True,
|
|
44
|
+
).strip()
|
|
45
|
+
except (subprocess.CalledProcessError, FileNotFoundError):
|
|
49
46
|
raise click.ClickException(
|
|
50
47
|
"roar requires the working directory to be inside a git repository."
|
|
51
|
-
)
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
48
|
+
) from None
|
|
49
|
+
|
|
50
|
+
# Check dirty status
|
|
51
|
+
try:
|
|
52
|
+
status_output = subprocess.check_output(
|
|
53
|
+
["git", "status", "--porcelain"],
|
|
54
|
+
stderr=subprocess.DEVNULL,
|
|
55
|
+
text=True,
|
|
56
|
+
cwd=repo_root,
|
|
57
|
+
).strip()
|
|
58
|
+
except (subprocess.CalledProcessError, FileNotFoundError):
|
|
59
|
+
status_output = ""
|
|
60
|
+
|
|
61
|
+
if status_output:
|
|
62
|
+
changes = status_output.split("\n")
|
|
55
63
|
lines = ["Git repo has uncommitted changes:"]
|
|
56
64
|
for change in changes[:5]:
|
|
57
65
|
lines.append(f" {change}")
|
|
@@ -61,15 +69,7 @@ def validate_git_clean() -> tuple[str, dict]:
|
|
|
61
69
|
lines.append("Commit your changes before running this command.")
|
|
62
70
|
raise click.ClickException("\n".join(lines))
|
|
63
71
|
|
|
64
|
-
|
|
65
|
-
vcs_info = vcs.get_info(repo_root)
|
|
66
|
-
git_info = {
|
|
67
|
-
"commit": vcs_info.commit if vcs_info else None,
|
|
68
|
-
"branch": vcs_info.branch if vcs_info else None,
|
|
69
|
-
"remote_url": vcs_info.remote_url if vcs_info else None,
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
return repo_root, git_info
|
|
72
|
+
return repo_root
|
|
73
73
|
|
|
74
74
|
|
|
75
75
|
def get_quiet_setting(quiet_flag: bool | None, repo_root: str | Path) -> bool:
|
|
@@ -99,10 +99,12 @@ def execute_and_report(
|
|
|
99
99
|
ctx: "RoarContext",
|
|
100
100
|
command: list[str],
|
|
101
101
|
job_type: str | None,
|
|
102
|
+
step_name: str | None,
|
|
102
103
|
quiet: bool,
|
|
103
104
|
hash_algorithms: list[str],
|
|
104
|
-
git_info: dict,
|
|
105
105
|
repo_root: str,
|
|
106
|
+
tracer_mode: str | None = None,
|
|
107
|
+
tracer_fallback: bool | None = None,
|
|
106
108
|
) -> int:
|
|
107
109
|
"""
|
|
108
110
|
Execute command via coordinator and show report.
|
|
@@ -118,9 +120,9 @@ def execute_and_report(
|
|
|
118
120
|
ctx: RoarContext with roar_dir and other context
|
|
119
121
|
command: Command to execute as list of strings
|
|
120
122
|
job_type: Job type - None for run, "build" for build
|
|
123
|
+
step_name: Optional user-defined step label
|
|
121
124
|
quiet: Whether to suppress output
|
|
122
125
|
hash_algorithms: List of hash algorithms to use
|
|
123
|
-
git_info: Git info dict with commit, branch, remote_url
|
|
124
126
|
repo_root: Git repository root path
|
|
125
127
|
|
|
126
128
|
Returns:
|
|
@@ -128,9 +130,28 @@ def execute_and_report(
|
|
|
128
130
|
"""
|
|
129
131
|
from typing import Literal, cast
|
|
130
132
|
|
|
133
|
+
from ...config import config_get
|
|
134
|
+
from ...core.bootstrap import bootstrap
|
|
131
135
|
from ...core.interfaces.run import RunContext
|
|
132
|
-
from ...
|
|
133
|
-
|
|
136
|
+
from ...services.execution.coordinator import RunCoordinator
|
|
137
|
+
|
|
138
|
+
# Ensure plugin/provider registries (including VCS=git) are populated.
|
|
139
|
+
bootstrap(ctx.roar_dir)
|
|
140
|
+
|
|
141
|
+
# Check if S3 proxy is enabled
|
|
142
|
+
proxy_service = None
|
|
143
|
+
if config_get("proxy.enabled"):
|
|
144
|
+
from ...services.execution.proxy import ProxyService
|
|
145
|
+
|
|
146
|
+
proxy_service = ProxyService()
|
|
147
|
+
if not proxy_service.find_proxy():
|
|
148
|
+
click.echo(
|
|
149
|
+
"Error: S3 proxy is enabled but roar-proxy binary not found.\n"
|
|
150
|
+
"Build it with: cargo build --release --manifest-path rust/Cargo.toml -p roar-proxy\n"
|
|
151
|
+
"Or disable: roar proxy disable",
|
|
152
|
+
err=True,
|
|
153
|
+
)
|
|
154
|
+
return 1
|
|
134
155
|
|
|
135
156
|
# Create run context
|
|
136
157
|
hash_algos = cast(list[Literal["blake3", "sha256", "sha512", "md5"]], hash_algorithms)
|
|
@@ -140,19 +161,20 @@ def execute_and_report(
|
|
|
140
161
|
repo_root=repo_root,
|
|
141
162
|
command=command,
|
|
142
163
|
job_type=job_type_literal,
|
|
164
|
+
step_name=step_name,
|
|
143
165
|
quiet=quiet,
|
|
144
166
|
hash_algorithms=hash_algos,
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
git_repo=git_info.get("remote_url"),
|
|
167
|
+
tracer_mode=tracer_mode, # type: ignore[arg-type]
|
|
168
|
+
tracer_fallback=tracer_fallback,
|
|
148
169
|
)
|
|
149
170
|
|
|
150
171
|
# Execute via coordinator
|
|
151
|
-
coordinator = RunCoordinator()
|
|
172
|
+
coordinator = RunCoordinator(proxy_service=proxy_service)
|
|
152
173
|
result = coordinator.execute(run_ctx)
|
|
153
174
|
|
|
154
175
|
# Present report
|
|
155
176
|
from ...presenters.console import ConsolePresenter
|
|
177
|
+
from ...presenters.run_report import RunReportPresenter
|
|
156
178
|
|
|
157
179
|
presenter = ConsolePresenter()
|
|
158
180
|
report = RunReportPresenter(presenter)
|