roar-cli 0.2.9__tar.gz → 0.2.11__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.9 → roar_cli-0.2.11}/PKG-INFO +80 -24
- {roar_cli-0.2.9 → roar_cli-0.2.11}/README.md +77 -23
- {roar_cli-0.2.9 → roar_cli-0.2.11}/pyproject.toml +13 -3
- roar_cli-0.2.11/roar/application/__init__.py +1 -0
- roar_cli-0.2.11/roar/application/get/__init__.py +7 -0
- roar_cli-0.2.11/roar/application/get/requests.py +22 -0
- roar_cli-0.2.11/roar/application/get/results.py +35 -0
- roar_cli-0.2.11/roar/application/get/service.py +169 -0
- roar_cli-0.2.11/roar/application/get/transfer.py +327 -0
- roar_cli-0.2.11/roar/application/git.py +194 -0
- roar_cli-0.2.11/roar/application/label_rendering.py +37 -0
- roar_cli-0.2.11/roar/application/labels.py +368 -0
- roar_cli-0.2.11/roar/application/publish/__init__.py +1 -0
- roar_cli-0.2.11/roar/application/publish/blake3_upgrade.py +258 -0
- roar_cli-0.2.11/roar/application/publish/collection.py +334 -0
- {roar_cli-0.2.9/roar/services/put → roar_cli-0.2.11/roar/application/publish}/composite_builder.py +2 -2
- roar_cli-0.2.11/roar/application/publish/composites.py +43 -0
- roar_cli-0.2.11/roar/application/publish/datasets.py +92 -0
- roar_cli-0.2.11/roar/application/publish/job_links.py +136 -0
- roar_cli-0.2.11/roar/application/publish/job_preparation.py +209 -0
- roar_cli-0.2.9/roar/services/upload/lineage_collector.py → roar_cli-0.2.11/roar/application/publish/lineage.py +218 -18
- roar_cli-0.2.11/roar/application/publish/lineage_composites.py +165 -0
- roar_cli-0.2.11/roar/application/publish/metadata.py +151 -0
- roar_cli-0.2.11/roar/application/publish/put_composites.py +258 -0
- roar_cli-0.2.11/roar/application/publish/put_execution.py +627 -0
- roar_cli-0.2.11/roar/application/publish/put_preparation.py +110 -0
- roar_cli-0.2.11/roar/application/publish/register_execution.py +359 -0
- roar_cli-0.2.11/roar/application/publish/register_preparation.py +78 -0
- roar_cli-0.2.11/roar/application/publish/register_preview_jobs.py +112 -0
- roar_cli-0.2.11/roar/application/publish/registration.py +513 -0
- roar_cli-0.2.11/roar/application/publish/requests.py +34 -0
- roar_cli-0.2.11/roar/application/publish/results.py +66 -0
- roar_cli-0.2.11/roar/application/publish/runtime.py +33 -0
- roar_cli-0.2.11/roar/application/publish/secrets.py +71 -0
- roar_cli-0.2.11/roar/application/publish/service.py +550 -0
- roar_cli-0.2.11/roar/application/publish/session.py +84 -0
- roar_cli-0.2.9/roar/services/put/resolver.py → roar_cli-0.2.11/roar/application/publish/source_resolution.py +1 -6
- roar_cli-0.2.11/roar/application/publish/targets.py +143 -0
- roar_cli-0.2.11/roar/application/query/__init__.py +54 -0
- roar_cli-0.2.11/roar/application/query/dag.py +82 -0
- roar_cli-0.2.11/roar/application/query/inputs.py +317 -0
- roar_cli-0.2.11/roar/application/query/label.py +115 -0
- roar_cli-0.2.11/roar/application/query/lineage.py +121 -0
- roar_cli-0.2.11/roar/application/query/log.py +93 -0
- roar_cli-0.2.11/roar/application/query/requests.py +97 -0
- roar_cli-0.2.11/roar/application/query/results.py +319 -0
- roar_cli-0.2.11/roar/application/query/show.py +370 -0
- roar_cli-0.2.11/roar/application/query/status.py +106 -0
- roar_cli-0.2.11/roar/application/reproduce/__init__.py +14 -0
- roar_cli-0.2.11/roar/application/reproduce/environment.py +91 -0
- roar_cli-0.2.11/roar/application/reproduce/lookup.py +144 -0
- roar_cli-0.2.11/roar/application/reproduce/requests.py +20 -0
- roar_cli-0.2.11/roar/application/reproduce/results.py +39 -0
- roar_cli-0.2.11/roar/application/reproduce/service.py +357 -0
- roar_cli-0.2.11/roar/application/run/__init__.py +13 -0
- roar_cli-0.2.9/roar/services/execution/dag_resolver.py → roar_cli-0.2.11/roar/application/run/dag_references.py +1 -1
- roar_cli-0.2.11/roar/application/run/execution.py +148 -0
- roar_cli-0.2.11/roar/application/run/requests.py +30 -0
- roar_cli-0.2.11/roar/application/run/service.py +187 -0
- roar_cli-0.2.11/roar/backends/__init__.py +1 -0
- roar_cli-0.2.11/roar/backends/local/__init__.py +1 -0
- roar_cli-0.2.11/roar/backends/local/plugin.py +47 -0
- roar_cli-0.2.11/roar/backends/osmo/__init__.py +29 -0
- roar_cli-0.2.11/roar/backends/osmo/config.py +171 -0
- roar_cli-0.2.11/roar/backends/osmo/export.py +188 -0
- roar_cli-0.2.11/roar/backends/osmo/host_execution.py +1646 -0
- roar_cli-0.2.11/roar/backends/osmo/lineage.py +315 -0
- roar_cli-0.2.11/roar/backends/osmo/plugin.py +37 -0
- roar_cli-0.2.11/roar/backends/osmo/runtime_bundle.py +131 -0
- roar_cli-0.2.11/roar/backends/osmo/submit.py +65 -0
- roar_cli-0.2.11/roar/backends/osmo/workflow.py +515 -0
- roar_cli-0.2.11/roar/backends/ray/__init__.py +3 -0
- roar_cli-0.2.11/roar/backends/ray/collector.py +398 -0
- roar_cli-0.2.11/roar/backends/ray/config.py +89 -0
- roar_cli-0.2.11/roar/backends/ray/constants.py +17 -0
- roar_cli-0.2.11/roar/backends/ray/env_contract.py +80 -0
- roar_cli-0.2.11/roar/backends/ray/fragment.py +135 -0
- {roar_cli-0.2.9/roar → roar_cli-0.2.11/roar/backends}/ray/fragment_reconstituter.py +29 -13
- roar_cli-0.2.11/roar/backends/ray/node_agent.py +92 -0
- roar_cli-0.2.11/roar/backends/ray/plugin.py +150 -0
- {roar_cli-0.2.9/roar → roar_cli-0.2.11/roar/backends}/ray/proxy_fragments.py +12 -26
- {roar_cli-0.2.9/roar → roar_cli-0.2.11/roar/backends}/ray/roar_worker.py +24 -49
- roar_cli-0.2.9/roar/services/execution/inject/sitecustomize.py → roar_cli-0.2.11/roar/backends/ray/runtime_hooks.py +625 -971
- roar_cli-0.2.9/roar/cli/commands/_ray_job_submit.py → roar_cli-0.2.11/roar/backends/ray/submit.py +96 -104
- roar_cli-0.2.11/roar/backends/ray/submit_context.py +141 -0
- roar_cli-0.2.11/roar/bin/libroar_tracer_preload.so +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/bin/roar-proxy +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/bin/roar-tracer +0 -0
- roar_cli-0.2.11/roar/bin/roar-tracer-ebpf +0 -0
- roar_cli-0.2.11/roar/bin/roar-tracer-preload +0 -0
- roar_cli-0.2.11/roar/bin/roard +0 -0
- roar_cli-0.2.11/roar/cli/__init__.py +228 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/cli/commands/auth.py +53 -26
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/cli/commands/build.py +20 -29
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/cli/commands/config.py +1 -1
- roar_cli-0.2.11/roar/cli/commands/dag.py +104 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/cli/commands/env.py +1 -1
- roar_cli-0.2.11/roar/cli/commands/get.py +163 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/cli/commands/init.py +28 -12
- roar_cli-0.2.11/roar/cli/commands/inputs.py +116 -0
- roar_cli-0.2.11/roar/cli/commands/label.py +136 -0
- roar_cli-0.2.11/roar/cli/commands/lineage.py +63 -0
- roar_cli-0.2.11/roar/cli/commands/log.py +34 -0
- roar_cli-0.2.11/roar/cli/commands/osmo.py +360 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/cli/commands/proxy.py +7 -7
- roar_cli-0.2.11/roar/cli/commands/put.py +196 -0
- roar_cli-0.2.11/roar/cli/commands/register.py +154 -0
- roar_cli-0.2.11/roar/cli/commands/reproduce.py +94 -0
- roar_cli-0.2.11/roar/cli/commands/run.py +113 -0
- roar_cli-0.2.11/roar/cli/commands/show.py +109 -0
- roar_cli-0.2.11/roar/cli/commands/status.py +21 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/cli/commands/tracer.py +2 -2
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/cli/context.py +1 -1
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/cli/decorators.py +14 -10
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/__init__.py +1 -25
- roar_cli-0.2.11/roar/core/bootstrap.py +91 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/interfaces/__init__.py +5 -14
- roar_cli-0.2.11/roar/core/interfaces/lineage.py +43 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/interfaces/provenance.py +12 -10
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/interfaces/repositories.py +45 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/interfaces/reproduction.py +0 -30
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/interfaces/run.py +10 -49
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/interfaces/services.py +2 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/interfaces/telemetry.py +5 -2
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/interfaces/vcs.py +5 -2
- {roar_cli-0.2.9/roar/services → roar_cli-0.2.11/roar/core}/logging.py +45 -45
- roar_cli-0.2.11/roar/core/models/__init__.py +81 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/models/dag.py +4 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/models/run.py +2 -0
- roar_cli-0.2.11/roar/core/operation_metadata.py +11 -0
- roar_cli-0.2.11/roar/core/session_hash.py +26 -0
- roar_cli-0.2.11/roar/core/step_name.py +46 -0
- roar_cli-0.2.11/roar/db/__init__.py +47 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/db/context.py +123 -112
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/db/hashing/__init__.py +2 -0
- roar_cli-0.2.11/roar/db/hashing/blake3.py +22 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/db/models.py +60 -0
- roar_cli-0.2.11/roar/db/query_context.py +729 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/db/repositories/__init__.py +3 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/db/repositories/artifact.py +99 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/db/repositories/job.py +61 -3
- roar_cli-0.2.11/roar/db/repositories/label.py +124 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/db/repositories/session.py +32 -53
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/db/schema.py +10 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/db/services/job_recording.py +59 -14
- roar_cli-0.2.11/roar/db/step_priority.py +91 -0
- roar_cli-0.2.11/roar/execution/__init__.py +1 -0
- roar_cli-0.2.11/roar/execution/cluster/__init__.py +1 -0
- roar_cli-0.2.11/roar/execution/cluster/bridge.py +233 -0
- roar_cli-0.2.11/roar/execution/cluster/proxy_config.py +24 -0
- roar_cli-0.2.11/roar/execution/fragments/__init__.py +1 -0
- roar_cli-0.2.9/roar/ray/collector.py → roar_cli-0.2.11/roar/execution/fragments/lineage.py +249 -337
- roar_cli-0.2.11/roar/execution/fragments/models.py +294 -0
- roar_cli-0.2.11/roar/execution/fragments/reconstitution.py +71 -0
- roar_cli-0.2.9/roar/ray/fragment_key.py → roar_cli-0.2.11/roar/execution/fragments/sessions.py +8 -8
- roar_cli-0.2.11/roar/execution/fragments/transport.py +54 -0
- roar_cli-0.2.11/roar/execution/framework/__init__.py +41 -0
- roar_cli-0.2.11/roar/execution/framework/contract.py +160 -0
- roar_cli-0.2.11/roar/execution/framework/planning.py +45 -0
- roar_cli-0.2.11/roar/execution/framework/registry.py +354 -0
- roar_cli-0.2.11/roar/execution/framework/runtime_imports.py +90 -0
- roar_cli-0.2.11/roar/execution/provenance/__init__.py +5 -0
- {roar_cli-0.2.9/roar/services → roar_cli-0.2.11/roar}/execution/provenance/assembler.py +4 -4
- {roar_cli-0.2.9/roar/services → roar_cli-0.2.11/roar}/execution/provenance/build_pip_collector.py +2 -2
- {roar_cli-0.2.9/roar/services → roar_cli-0.2.11/roar}/execution/provenance/build_tool_collector.py +2 -2
- {roar_cli-0.2.9/roar/services → roar_cli-0.2.11/roar}/execution/provenance/data_loader.py +23 -4
- {roar_cli-0.2.9/roar/services → roar_cli-0.2.11/roar}/execution/provenance/file_filter.py +3 -3
- {roar_cli-0.2.9/roar/services → roar_cli-0.2.11/roar}/execution/provenance/package_collector.py +3 -3
- {roar_cli-0.2.9/roar/services → roar_cli-0.2.11/roar}/execution/provenance/runtime_collector.py +3 -3
- {roar_cli-0.2.9/roar/services → roar_cli-0.2.11/roar}/execution/provenance/service.py +11 -10
- roar_cli-0.2.11/roar/execution/recording/__init__.py +25 -0
- roar_cli-0.2.11/roar/execution/recording/dataset_metadata.py +108 -0
- {roar_cli-0.2.9/roar/services/execution → roar_cli-0.2.11/roar/execution/recording}/job_recording.py +203 -13
- roar_cli-0.2.11/roar/execution/reproduction/__init__.py +9 -0
- {roar_cli-0.2.9/roar/services → roar_cli-0.2.11/roar/execution}/reproduction/environment_setup.py +1 -1
- roar_cli-0.2.11/roar/execution/runtime/__init__.py +47 -0
- {roar_cli-0.2.9/roar/services/execution → roar_cli-0.2.11/roar/execution/runtime}/backup.py +2 -2
- {roar_cli-0.2.9/roar/services/execution → roar_cli-0.2.11/roar/execution/runtime}/coordinator.py +39 -10
- roar_cli-0.2.11/roar/execution/runtime/driver_entrypoint.py +147 -0
- roar_cli-0.2.11/roar/execution/runtime/host_execution.py +39 -0
- roar_cli-0.2.11/roar/execution/runtime/inject/__init__.py +1 -0
- roar_cli-0.2.11/roar/execution/runtime/inject/sitecustomize.py +30 -0
- roar_cli-0.2.11/roar/execution/runtime/inject/support.py +51 -0
- roar_cli-0.2.11/roar/execution/runtime/inject/tracker.py +194 -0
- {roar_cli-0.2.9/roar/services/execution → roar_cli-0.2.11/roar/execution/runtime}/tracer.py +7 -6
- roar_cli-0.2.11/roar/execution/runtime/worker_bootstrap.py +135 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/filters/files.py +30 -9
- roar_cli-0.2.11/roar/integrations/__init__.py +27 -0
- roar_cli-0.2.11/roar/integrations/config/__init__.py +61 -0
- roar_cli-0.2.9/roar/config.py → roar_cli-0.2.11/roar/integrations/config/access.py +70 -24
- roar_cli-0.2.9/roar/core/settings.py → roar_cli-0.2.11/roar/integrations/config/loader.py +29 -15
- roar_cli-0.2.11/roar/integrations/config/raw.py +196 -0
- roar_cli-0.2.9/roar/core/models/config.py → roar_cli-0.2.11/roar/integrations/config/schema.py +53 -19
- roar_cli-0.2.11/roar/integrations/discovery.py +54 -0
- {roar_cli-0.2.9/roar/services/get/backends → roar_cli-0.2.11/roar/integrations/download}/__init__.py +3 -7
- roar_cli-0.2.11/roar/integrations/download/get.py +40 -0
- roar_cli-0.2.11/roar/integrations/git/__init__.py +10 -0
- {roar_cli-0.2.9/roar/plugins/vcs → roar_cli-0.2.11/roar/integrations/git}/base.py +9 -12
- roar_cli-0.2.9/roar/services/transfer/common.py → roar_cli-0.2.11/roar/integrations/git/context.py +5 -40
- roar_cli-0.2.9/roar/plugins/vcs/git.py → roar_cli-0.2.11/roar/integrations/git/provider.py +14 -12
- roar_cli-0.2.11/roar/integrations/glaas/__init__.py +41 -0
- {roar_cli-0.2.9/roar → roar_cli-0.2.11/roar/integrations}/glaas/auth.py +1 -1
- roar_cli-0.2.9/roar/glaas_client.py → roar_cli-0.2.11/roar/integrations/glaas/client.py +17 -9
- roar_cli-0.2.9/roar/ray/glaas_fragment_streamer.py → roar_cli-0.2.11/roar/integrations/glaas/fragment_streamer.py +3 -3
- roar_cli-0.2.11/roar/integrations/glaas/registration/__init__.py +30 -0
- {roar_cli-0.2.9/roar/services → roar_cli-0.2.11/roar/integrations/glaas}/registration/artifact.py +6 -6
- {roar_cli-0.2.9/roar/services → roar_cli-0.2.11/roar/integrations/glaas}/registration/coordinator.py +4 -4
- {roar_cli-0.2.9/roar/services → roar_cli-0.2.11/roar/integrations/glaas}/registration/job.py +6 -6
- {roar_cli-0.2.9/roar/services → roar_cli-0.2.11/roar/integrations/glaas}/registration/session.py +14 -23
- roar_cli-0.2.11/roar/integrations/glaas/transport.py +253 -0
- roar_cli-0.2.11/roar/integrations/registry.py +103 -0
- {roar_cli-0.2.9/roar/services/put/backends → roar_cli-0.2.11/roar/integrations/storage}/__init__.py +6 -7
- roar_cli-0.2.11/roar/integrations/storage/publish.py +40 -0
- {roar_cli-0.2.9/roar/plugins → roar_cli-0.2.11/roar/integrations}/telemetry/__init__.py +1 -5
- {roar_cli-0.2.9/roar/plugins → roar_cli-0.2.11/roar/integrations}/telemetry/base.py +2 -1
- {roar_cli-0.2.9/roar/plugins → roar_cli-0.2.11/roar/integrations}/telemetry/wandb.py +1 -1
- roar_cli-0.2.11/roar/presenters/__init__.py +31 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/presenters/dag_data_builder.py +49 -27
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/presenters/dag_renderer.py +9 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/presenters/run_report.py +10 -2
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/presenters/show_renderer.py +38 -17
- roar_cli-0.2.9/roar/bin/libroar_tracer_preload.so +0 -0
- roar_cli-0.2.9/roar/bin/roar-tracer-ebpf +0 -0
- roar_cli-0.2.9/roar/bin/roar-tracer-preload +0 -0
- roar_cli-0.2.9/roar/bin/roard +0 -0
- roar_cli-0.2.9/roar/cli/__init__.py +0 -157
- roar_cli-0.2.9/roar/cli/commands/_execution.py +0 -241
- roar_cli-0.2.9/roar/cli/commands/dag.py +0 -175
- roar_cli-0.2.9/roar/cli/commands/get.py +0 -293
- roar_cli-0.2.9/roar/cli/commands/lineage.py +0 -179
- roar_cli-0.2.9/roar/cli/commands/log.py +0 -117
- roar_cli-0.2.9/roar/cli/commands/put.py +0 -325
- roar_cli-0.2.9/roar/cli/commands/register.py +0 -139
- roar_cli-0.2.9/roar/cli/commands/reproduce.py +0 -281
- roar_cli-0.2.9/roar/cli/commands/run.py +0 -272
- roar_cli-0.2.9/roar/cli/commands/show.py +0 -334
- roar_cli-0.2.9/roar/cli/commands/status.py +0 -88
- roar_cli-0.2.9/roar/core/bootstrap.py +0 -100
- roar_cli-0.2.9/roar/core/container.py +0 -423
- roar_cli-0.2.9/roar/core/di.py +0 -118
- roar_cli-0.2.9/roar/core/interfaces/cloud.py +0 -135
- roar_cli-0.2.9/roar/core/interfaces/command.py +0 -76
- roar_cli-0.2.9/roar/core/interfaces/upload.py +0 -83
- roar_cli-0.2.9/roar/core/logging.py +0 -34
- roar_cli-0.2.9/roar/core/models/__init__.py +0 -171
- roar_cli-0.2.9/roar/core/models/command.py +0 -89
- roar_cli-0.2.9/roar/core/registry.py +0 -258
- roar_cli-0.2.9/roar/db/__init__.py +0 -63
- roar_cli-0.2.9/roar/glaas/__init__.py +0 -24
- roar_cli-0.2.9/roar/glaas/transport.py +0 -127
- roar_cli-0.2.9/roar/plugins/__init__.py +0 -16
- roar_cli-0.2.9/roar/plugins/cloud/__init__.py +0 -13
- roar_cli-0.2.9/roar/plugins/cloud/base.py +0 -302
- roar_cli-0.2.9/roar/plugins/vcs/__init__.py +0 -14
- roar_cli-0.2.9/roar/presenters/__init__.py +0 -14
- roar_cli-0.2.9/roar/ray/__init__.py +0 -6
- roar_cli-0.2.9/roar/ray/actor.py +0 -38
- roar_cli-0.2.9/roar/ray/driver_entrypoint.py +0 -143
- roar_cli-0.2.9/roar/ray/fragment.py +0 -51
- roar_cli-0.2.9/roar/ray/node_agent.py +0 -179
- roar_cli-0.2.9/roar/services/__init__.py +0 -8
- roar_cli-0.2.9/roar/services/execution/__init__.py +0 -44
- roar_cli-0.2.9/roar/services/execution/args.py +0 -163
- roar_cli-0.2.9/roar/services/execution/execution_service.py +0 -203
- roar_cli-0.2.9/roar/services/execution/inject/__init__.py +0 -1
- roar_cli-0.2.9/roar/services/execution/provenance/__init__.py +0 -10
- roar_cli-0.2.9/roar/services/get/__init__.py +0 -10
- roar_cli-0.2.9/roar/services/get/service.py +0 -444
- roar_cli-0.2.9/roar/services/lookup/__init__.py +0 -19
- roar_cli-0.2.9/roar/services/lookup/entity_lookup.py +0 -263
- roar_cli-0.2.9/roar/services/lookup/step_parser.py +0 -156
- roar_cli-0.2.9/roar/services/put/__init__.py +0 -18
- roar_cli-0.2.9/roar/services/put/git.py +0 -132
- roar_cli-0.2.9/roar/services/put/service.py +0 -1563
- roar_cli-0.2.9/roar/services/registration/__init__.py +0 -22
- roar_cli-0.2.9/roar/services/registration/_dataset_label.py +0 -52
- roar_cli-0.2.9/roar/services/registration/register_service.py +0 -1058
- roar_cli-0.2.9/roar/services/reproduction/__init__.py +0 -21
- roar_cli-0.2.9/roar/services/reproduction/service.py +0 -457
- roar_cli-0.2.9/roar/services/secrets/__init__.py +0 -5
- roar_cli-0.2.9/roar/services/secrets/filter_service.py +0 -133
- roar_cli-0.2.9/roar/services/transfer/__init__.py +0 -18
- roar_cli-0.2.9/roar/services/upload/__init__.py +0 -18
- roar_cli-0.2.9/roar/services/upload/service.py +0 -256
- roar_cli-0.2.9/roar/services/vcs/__init__.py +0 -15
- roar_cli-0.2.9/roar/services/vcs/git_access.py +0 -206
- {roar_cli-0.2.9 → roar_cli-0.2.11}/LICENSE +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/__init__.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/__main__.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/analyzers/__init__.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/analyzers/base.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/analyzers/experiment_trackers.py +0 -0
- {roar_cli-0.2.9/roar → roar_cli-0.2.11/roar/backends}/ray/_agent_names.py +0 -0
- {roar_cli-0.2.9/roar → roar_cli-0.2.11/roar/backends}/ray/s3_key_paths.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/cli/commands/__init__.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/cli/commands/pop.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/cli/commands/reset.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/digests.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/dto/__init__.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/dto/registration.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/exceptions.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/interfaces/config.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/interfaces/logger.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/interfaces/presenter.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/interfaces/registration.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/models/artifact.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/models/base.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/models/dataset_identifier.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/models/glaas.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/models/job.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/models/lineage.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/models/provenance.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/models/session.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/models/telemetry.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/models/vcs.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/tracer_modes.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/validation.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/db/engine.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/db/hashing/backend.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/db/repositories/collection.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/db/repositories/composite.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/db/repositories/hash_cache.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/db/services/__init__.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/db/services/hashing.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/db/services/lineage.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/db/services/session.py +0 -0
- {roar_cli-0.2.9/roar/services/execution → roar_cli-0.2.11/roar/execution/cluster}/proxy.py +0 -0
- {roar_cli-0.2.9/roar/services → roar_cli-0.2.11/roar}/execution/provenance/process_summarizer.py +0 -0
- {roar_cli-0.2.9/roar/services/execution → roar_cli-0.2.11/roar/execution/recording}/dataset_identifier.py +0 -0
- /roar_cli-0.2.9/roar/services/registration/_dataset_profile.py → /roar_cli-0.2.11/roar/execution/recording/dataset_profile.py +0 -0
- {roar_cli-0.2.9/roar/services → roar_cli-0.2.11/roar/execution}/reproduction/installers.py +0 -0
- {roar_cli-0.2.9/roar/services → roar_cli-0.2.11/roar/execution}/reproduction/pipeline_executor.py +0 -0
- {roar_cli-0.2.9/roar/services → roar_cli-0.2.11/roar/execution}/reproduction/pipeline_metadata.py +0 -0
- {roar_cli-0.2.9/roar/services/execution → roar_cli-0.2.11/roar/execution/runtime}/signal_handler.py +0 -0
- {roar_cli-0.2.9/roar/services/execution → roar_cli-0.2.11/roar/execution/runtime}/tracer_backends.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/filters/__init__.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/filters/omit.py +0 -0
- {roar_cli-0.2.9/roar/services/get/backends → roar_cli-0.2.11/roar/integrations/download}/base.py +0 -0
- {roar_cli-0.2.9/roar/services/get/backends → roar_cli-0.2.11/roar/integrations/download}/gcs.py +0 -0
- {roar_cli-0.2.9/roar/services/get/backends → roar_cli-0.2.11/roar/integrations/download}/http.py +0 -0
- {roar_cli-0.2.9/roar/services/get/backends → roar_cli-0.2.11/roar/integrations/download}/noop.py +0 -0
- {roar_cli-0.2.9/roar/services/get/backends → roar_cli-0.2.11/roar/integrations/download}/s3.py +0 -0
- {roar_cli-0.2.9/roar/services → roar_cli-0.2.11/roar/integrations/glaas}/registration/_artifact_ref.py +0 -0
- /roar_cli-0.2.9/roar/services/transfer/backend_resolution.py → /roar_cli-0.2.11/roar/integrations/resolution.py +0 -0
- {roar_cli-0.2.9/roar/services/put/backends → roar_cli-0.2.11/roar/integrations/storage}/base.py +0 -0
- {roar_cli-0.2.9/roar/services/put/backends → roar_cli-0.2.11/roar/integrations/storage}/gcs.py +0 -0
- {roar_cli-0.2.9/roar/services/put/backends → roar_cli-0.2.11/roar/integrations/storage}/memory.py +0 -0
- {roar_cli-0.2.9/roar/services/put/backends → roar_cli-0.2.11/roar/integrations/storage}/noop.py +0 -0
- {roar_cli-0.2.9/roar/services/put/backends → roar_cli-0.2.11/roar/integrations/storage}/s3.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/presenters/console.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/presenters/formatting.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/presenters/null.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/presenters/spinner.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/utils/__init__.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/utils/cloud.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/utils/git_url.py +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/rust/Cargo.lock +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/rust/Cargo.toml +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/rust/crates/artifact-hash-core/Cargo.toml +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/rust/crates/artifact-hash-core/src/lib.rs +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/rust/crates/artifact-hash-py/Cargo.toml +0 -0
- {roar_cli-0.2.9 → roar_cli-0.2.11}/rust/crates/artifact-hash-py/src/lib.rs +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: roar-cli
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.11
|
|
4
4
|
Classifier: Development Status :: 3 - Alpha
|
|
5
5
|
Classifier: Intended Audience :: Developers
|
|
6
6
|
Classifier: Intended Audience :: Science/Research
|
|
@@ -15,8 +15,10 @@ Classifier: Topic :: Software Development :: Version Control
|
|
|
15
15
|
Classifier: Typing :: Typed
|
|
16
16
|
Requires-Dist: blake3>=0.3.0
|
|
17
17
|
Requires-Dist: click>=8.1.0
|
|
18
|
+
Requires-Dist: cryptography>=42.0.0
|
|
18
19
|
Requires-Dist: dependency-injector>=4.40.0
|
|
19
20
|
Requires-Dist: msgpack>=1.0.0
|
|
21
|
+
Requires-Dist: pyyaml>=6.0
|
|
20
22
|
Requires-Dist: sqlalchemy>=2.0.0
|
|
21
23
|
Requires-Dist: pysqlite3-binary>=0.5.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'
|
|
22
24
|
Requires-Dist: pydantic>=2.0.0
|
|
@@ -66,12 +68,12 @@ Requires Python 3.10+.
|
|
|
66
68
|
|
|
67
69
|
### Platform Support
|
|
68
70
|
|
|
69
|
-
| Platform | Status
|
|
70
|
-
| ------------- |
|
|
71
|
-
| Linux x86_64 | ✅ Full support
|
|
72
|
-
| Linux aarch64 | ✅ Full support
|
|
71
|
+
| Platform | Status |
|
|
72
|
+
| ------------- | ----------------------------------------------------------- |
|
|
73
|
+
| Linux x86_64 | ✅ Full support |
|
|
74
|
+
| Linux aarch64 | ✅ Full support |
|
|
73
75
|
| macOS | 🚧 Experimental ([limitations](#macos-tracing-limitations)) |
|
|
74
|
-
| Windows | Coming soon
|
|
76
|
+
| Windows | Coming soon |
|
|
75
77
|
|
|
76
78
|
PyPI wheels are published for Linux and macOS (`x86_64` and `arm64`).
|
|
77
79
|
|
|
@@ -107,11 +109,11 @@ roar run python evaluate.py --model model.pt --output metrics.json
|
|
|
107
109
|
|
|
108
110
|
### Backends
|
|
109
111
|
|
|
110
|
-
| Backend | Binary
|
|
111
|
-
|
|
|
112
|
-
| eBPF
|
|
112
|
+
| Backend | Binary | Platforms | Notes |
|
|
113
|
+
| ------- | ------------------------------------------------ | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
114
|
+
| eBPF | `roar-tracer-ebpf` | Linux | Fastest, but requires permissions and kernel support. |
|
|
113
115
|
| 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
|
|
116
|
+
| ptrace | `roar-tracer` | Linux | Slowest, broadest compatibility on Linux. |
|
|
115
117
|
|
|
116
118
|
### Building
|
|
117
119
|
|
|
@@ -259,19 +261,19 @@ roar config set <key> <value>
|
|
|
259
261
|
|
|
260
262
|
Run `roar config list` to see all available options with descriptions. Common options:
|
|
261
263
|
|
|
262
|
-
| Key | Default
|
|
263
|
-
| ------------------------------ |
|
|
264
|
-
| `output.track_repo_files` | false
|
|
265
|
-
| `output.quiet` | false
|
|
266
|
-
| `filters.ignore_system_reads` | true
|
|
267
|
-
| `filters.ignore_package_reads` | true
|
|
268
|
-
| `filters.ignore_torch_cache` | true
|
|
269
|
-
| `filters.ignore_tmp_files` | true
|
|
264
|
+
| Key | Default | Description |
|
|
265
|
+
| ------------------------------ | ---------------------- | --------------------------------------- |
|
|
266
|
+
| `output.track_repo_files` | false | Include repo files in provenance |
|
|
267
|
+
| `output.quiet` | false | Suppress written files report |
|
|
268
|
+
| `filters.ignore_system_reads` | true | Ignore /sys, /etc, /sbin reads |
|
|
269
|
+
| `filters.ignore_package_reads` | true | Ignore installed package reads |
|
|
270
|
+
| `filters.ignore_torch_cache` | true | Ignore torch/triton cache |
|
|
271
|
+
| `filters.ignore_tmp_files` | true | Ignore /tmp files |
|
|
270
272
|
| `glaas.url` | <https://api.glaas.ai> | GLaaS server URL |
|
|
271
273
|
| `glaas.web_url` | <https://glaas.ai> | GLaaS web UI URL |
|
|
272
|
-
| `registration.omit.enabled` | true
|
|
273
|
-
| `hash.primary` | blake3
|
|
274
|
-
| `logging.level` | warning
|
|
274
|
+
| `registration.omit.enabled` | true | Enable secret filtering |
|
|
275
|
+
| `hash.primary` | blake3 | Primary hash algorithm |
|
|
276
|
+
| `logging.level` | warning | Log level (debug, info, warning, error) |
|
|
275
277
|
|
|
276
278
|
### `roar dag`
|
|
277
279
|
|
|
@@ -303,16 +305,63 @@ Display recent job execution history.
|
|
|
303
305
|
roar log # Show recent job history
|
|
304
306
|
```
|
|
305
307
|
|
|
308
|
+
### `roar label`
|
|
309
|
+
|
|
310
|
+
Manage local labels for DAGs (sessions), jobs, and artifacts.
|
|
311
|
+
|
|
312
|
+
```bash
|
|
313
|
+
# Set labels (patches the current label document)
|
|
314
|
+
roar label set dag current owner=alice team=ml
|
|
315
|
+
roar label set job @2 phase=train lr=0.001
|
|
316
|
+
roar label set artifact ./outputs/model.pt model.name=resnet50 stage=baseline
|
|
317
|
+
|
|
318
|
+
# Copy labels from one entity to another
|
|
319
|
+
roar label cp job @2 artifact ./outputs/model.pt
|
|
320
|
+
|
|
321
|
+
# Show current labels
|
|
322
|
+
roar label show dag current
|
|
323
|
+
roar label show job @2
|
|
324
|
+
roar label show artifact ./outputs/model.pt
|
|
325
|
+
|
|
326
|
+
# Show label history (all versions)
|
|
327
|
+
roar label history dag current
|
|
328
|
+
roar label history artifact <artifact-hash>
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
**Entity targets:**
|
|
332
|
+
|
|
333
|
+
- `dag`: `current` or a session hash prefix
|
|
334
|
+
- `job`: step ref (`@N` or `@BN`) or job UID
|
|
335
|
+
- `artifact`: file path or artifact hash
|
|
336
|
+
|
|
337
|
+
Labels are stored locally and included in lineage registration/publish flows to GLaaS when supported by the configured server.
|
|
338
|
+
|
|
306
339
|
### `roar register`
|
|
307
340
|
|
|
308
|
-
Register artifact lineage with GLaaS.
|
|
341
|
+
Register session, job, step, or artifact lineage with GLaaS.
|
|
309
342
|
|
|
310
343
|
```bash
|
|
311
344
|
roar register model.pt # Register model lineage
|
|
312
345
|
roar register --dry-run model.pt # Preview without registering
|
|
313
346
|
roar register -y model.pt # Skip confirmation prompt
|
|
347
|
+
roar register @4 # Register lineage for DAG step 4
|
|
348
|
+
roar register deadbeef # Register lineage for a local job UID
|
|
349
|
+
roar register 7f1e...c9a4 # Register lineage for a tracked artifact hash
|
|
350
|
+
roar register 8d7a1f2c... # Register a whole local session
|
|
351
|
+
roar register s3://bucket/run/out # Register a tracked remote S3 artifact
|
|
314
352
|
```
|
|
315
353
|
|
|
354
|
+
**Supported targets:**
|
|
355
|
+
|
|
356
|
+
- Local artifact path: `model.pt`, `./outputs/metrics.json`
|
|
357
|
+
- Tracked artifact hash: primitive or composite
|
|
358
|
+
- Local job UID: full UID or unique prefix
|
|
359
|
+
- Step reference: `@N` or `@BN`
|
|
360
|
+
- Local session hash: full hash or unique prefix
|
|
361
|
+
- Tracked remote path: `s3://...`
|
|
362
|
+
|
|
363
|
+
For bare 8-character hex targets, `roar register` prefers a matching local job UID before falling back to session-hash-prefix resolution.
|
|
364
|
+
|
|
316
365
|
### `roar put`
|
|
317
366
|
|
|
318
367
|
Upload artifacts to cloud storage and register lineage with GLaaS.
|
|
@@ -324,11 +373,13 @@ roar put @2 s3://bucket/outputs/ -m "Step 2 outputs"
|
|
|
324
373
|
```
|
|
325
374
|
|
|
326
375
|
**Options:**
|
|
376
|
+
|
|
327
377
|
- `-m, --message` — Description of the upload (required)
|
|
328
378
|
- `--dry-run` — Preview without uploading
|
|
329
379
|
- `--no-tag` — Skip git tagging
|
|
330
380
|
|
|
331
381
|
**Source formats:**
|
|
382
|
+
|
|
332
383
|
- File path: `model.pt`, `./data/output.csv`
|
|
333
384
|
- Directory: `./checkpoints/` (uploads all files recursively)
|
|
334
385
|
- Job reference: `@2` (uploads outputs from step 2)
|
|
@@ -346,6 +397,7 @@ roar get s3://bucket/checkpoints/ ./local/ # Download all files under prefix
|
|
|
346
397
|
```
|
|
347
398
|
|
|
348
399
|
**Options:**
|
|
400
|
+
|
|
349
401
|
- `-m, --message` — Annotation for this download
|
|
350
402
|
- `--hash` — Expected BLAKE3 hash (for verification)
|
|
351
403
|
- `--tag` — Create a git tag for this download
|
|
@@ -377,7 +429,7 @@ roar show ./output/model.pkl # Show artifact by path
|
|
|
377
429
|
|
|
378
430
|
### `roar status`
|
|
379
431
|
|
|
380
|
-
Show a summary of the active session.
|
|
432
|
+
Show a summary of the active session, including the current DAG hash.
|
|
381
433
|
|
|
382
434
|
```bash
|
|
383
435
|
roar status
|
|
@@ -393,6 +445,7 @@ roar pop -y # Pop without confirmation (skip prompt)
|
|
|
393
445
|
```
|
|
394
446
|
|
|
395
447
|
**What it does:**
|
|
448
|
+
|
|
396
449
|
- Removes the last job from the session history
|
|
397
450
|
- Deletes output artifacts created by that job (unless they're packages/system files)
|
|
398
451
|
- Does not affect the original input files
|
|
@@ -443,7 +496,7 @@ Add `.roar/` to your `.gitignore` (roar offers to do this during `roar init`).
|
|
|
443
496
|
|
|
444
497
|
## GLaaS Server
|
|
445
498
|
|
|
446
|
-
Roar can register
|
|
499
|
+
Roar can register sessions, jobs, steps, and artifacts with a GLaaS (Global Lineage-as-a-Service) server using the `roar register` command.
|
|
447
500
|
|
|
448
501
|
### Server Setup
|
|
449
502
|
|
|
@@ -479,6 +532,9 @@ roar auth register
|
|
|
479
532
|
roar auth test
|
|
480
533
|
```
|
|
481
534
|
|
|
535
|
+
> [!TIP]
|
|
536
|
+
> Roar activity can be registered without authentication. Unauthenticated registrations are attributed to a public "anonymous" user, but are not guaranteed persistence. For persistent attribution, we recommend setting up `roar auth`.
|
|
537
|
+
|
|
482
538
|
## Development
|
|
483
539
|
|
|
484
540
|
### Prerequisites
|
|
@@ -20,12 +20,12 @@ Requires Python 3.10+.
|
|
|
20
20
|
|
|
21
21
|
### Platform Support
|
|
22
22
|
|
|
23
|
-
| Platform | Status
|
|
24
|
-
| ------------- |
|
|
25
|
-
| Linux x86_64 | ✅ Full support
|
|
26
|
-
| Linux aarch64 | ✅ Full support
|
|
23
|
+
| Platform | Status |
|
|
24
|
+
| ------------- | ----------------------------------------------------------- |
|
|
25
|
+
| Linux x86_64 | ✅ Full support |
|
|
26
|
+
| Linux aarch64 | ✅ Full support |
|
|
27
27
|
| macOS | 🚧 Experimental ([limitations](#macos-tracing-limitations)) |
|
|
28
|
-
| Windows | Coming soon
|
|
28
|
+
| Windows | Coming soon |
|
|
29
29
|
|
|
30
30
|
PyPI wheels are published for Linux and macOS (`x86_64` and `arm64`).
|
|
31
31
|
|
|
@@ -61,11 +61,11 @@ roar run python evaluate.py --model model.pt --output metrics.json
|
|
|
61
61
|
|
|
62
62
|
### Backends
|
|
63
63
|
|
|
64
|
-
| Backend | Binary
|
|
65
|
-
|
|
|
66
|
-
| eBPF
|
|
64
|
+
| Backend | Binary | Platforms | Notes |
|
|
65
|
+
| ------- | ------------------------------------------------ | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
66
|
+
| eBPF | `roar-tracer-ebpf` | Linux | Fastest, but requires permissions and kernel support. |
|
|
67
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
|
|
68
|
+
| ptrace | `roar-tracer` | Linux | Slowest, broadest compatibility on Linux. |
|
|
69
69
|
|
|
70
70
|
### Building
|
|
71
71
|
|
|
@@ -213,19 +213,19 @@ roar config set <key> <value>
|
|
|
213
213
|
|
|
214
214
|
Run `roar config list` to see all available options with descriptions. Common options:
|
|
215
215
|
|
|
216
|
-
| Key | Default
|
|
217
|
-
| ------------------------------ |
|
|
218
|
-
| `output.track_repo_files` | false
|
|
219
|
-
| `output.quiet` | false
|
|
220
|
-
| `filters.ignore_system_reads` | true
|
|
221
|
-
| `filters.ignore_package_reads` | true
|
|
222
|
-
| `filters.ignore_torch_cache` | true
|
|
223
|
-
| `filters.ignore_tmp_files` | true
|
|
216
|
+
| Key | Default | Description |
|
|
217
|
+
| ------------------------------ | ---------------------- | --------------------------------------- |
|
|
218
|
+
| `output.track_repo_files` | false | Include repo files in provenance |
|
|
219
|
+
| `output.quiet` | false | Suppress written files report |
|
|
220
|
+
| `filters.ignore_system_reads` | true | Ignore /sys, /etc, /sbin reads |
|
|
221
|
+
| `filters.ignore_package_reads` | true | Ignore installed package reads |
|
|
222
|
+
| `filters.ignore_torch_cache` | true | Ignore torch/triton cache |
|
|
223
|
+
| `filters.ignore_tmp_files` | true | Ignore /tmp files |
|
|
224
224
|
| `glaas.url` | <https://api.glaas.ai> | GLaaS server URL |
|
|
225
225
|
| `glaas.web_url` | <https://glaas.ai> | GLaaS web UI URL |
|
|
226
|
-
| `registration.omit.enabled` | true
|
|
227
|
-
| `hash.primary` | blake3
|
|
228
|
-
| `logging.level` | warning
|
|
226
|
+
| `registration.omit.enabled` | true | Enable secret filtering |
|
|
227
|
+
| `hash.primary` | blake3 | Primary hash algorithm |
|
|
228
|
+
| `logging.level` | warning | Log level (debug, info, warning, error) |
|
|
229
229
|
|
|
230
230
|
### `roar dag`
|
|
231
231
|
|
|
@@ -257,16 +257,63 @@ Display recent job execution history.
|
|
|
257
257
|
roar log # Show recent job history
|
|
258
258
|
```
|
|
259
259
|
|
|
260
|
+
### `roar label`
|
|
261
|
+
|
|
262
|
+
Manage local labels for DAGs (sessions), jobs, and artifacts.
|
|
263
|
+
|
|
264
|
+
```bash
|
|
265
|
+
# Set labels (patches the current label document)
|
|
266
|
+
roar label set dag current owner=alice team=ml
|
|
267
|
+
roar label set job @2 phase=train lr=0.001
|
|
268
|
+
roar label set artifact ./outputs/model.pt model.name=resnet50 stage=baseline
|
|
269
|
+
|
|
270
|
+
# Copy labels from one entity to another
|
|
271
|
+
roar label cp job @2 artifact ./outputs/model.pt
|
|
272
|
+
|
|
273
|
+
# Show current labels
|
|
274
|
+
roar label show dag current
|
|
275
|
+
roar label show job @2
|
|
276
|
+
roar label show artifact ./outputs/model.pt
|
|
277
|
+
|
|
278
|
+
# Show label history (all versions)
|
|
279
|
+
roar label history dag current
|
|
280
|
+
roar label history artifact <artifact-hash>
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
**Entity targets:**
|
|
284
|
+
|
|
285
|
+
- `dag`: `current` or a session hash prefix
|
|
286
|
+
- `job`: step ref (`@N` or `@BN`) or job UID
|
|
287
|
+
- `artifact`: file path or artifact hash
|
|
288
|
+
|
|
289
|
+
Labels are stored locally and included in lineage registration/publish flows to GLaaS when supported by the configured server.
|
|
290
|
+
|
|
260
291
|
### `roar register`
|
|
261
292
|
|
|
262
|
-
Register artifact lineage with GLaaS.
|
|
293
|
+
Register session, job, step, or artifact lineage with GLaaS.
|
|
263
294
|
|
|
264
295
|
```bash
|
|
265
296
|
roar register model.pt # Register model lineage
|
|
266
297
|
roar register --dry-run model.pt # Preview without registering
|
|
267
298
|
roar register -y model.pt # Skip confirmation prompt
|
|
299
|
+
roar register @4 # Register lineage for DAG step 4
|
|
300
|
+
roar register deadbeef # Register lineage for a local job UID
|
|
301
|
+
roar register 7f1e...c9a4 # Register lineage for a tracked artifact hash
|
|
302
|
+
roar register 8d7a1f2c... # Register a whole local session
|
|
303
|
+
roar register s3://bucket/run/out # Register a tracked remote S3 artifact
|
|
268
304
|
```
|
|
269
305
|
|
|
306
|
+
**Supported targets:**
|
|
307
|
+
|
|
308
|
+
- Local artifact path: `model.pt`, `./outputs/metrics.json`
|
|
309
|
+
- Tracked artifact hash: primitive or composite
|
|
310
|
+
- Local job UID: full UID or unique prefix
|
|
311
|
+
- Step reference: `@N` or `@BN`
|
|
312
|
+
- Local session hash: full hash or unique prefix
|
|
313
|
+
- Tracked remote path: `s3://...`
|
|
314
|
+
|
|
315
|
+
For bare 8-character hex targets, `roar register` prefers a matching local job UID before falling back to session-hash-prefix resolution.
|
|
316
|
+
|
|
270
317
|
### `roar put`
|
|
271
318
|
|
|
272
319
|
Upload artifacts to cloud storage and register lineage with GLaaS.
|
|
@@ -278,11 +325,13 @@ roar put @2 s3://bucket/outputs/ -m "Step 2 outputs"
|
|
|
278
325
|
```
|
|
279
326
|
|
|
280
327
|
**Options:**
|
|
328
|
+
|
|
281
329
|
- `-m, --message` — Description of the upload (required)
|
|
282
330
|
- `--dry-run` — Preview without uploading
|
|
283
331
|
- `--no-tag` — Skip git tagging
|
|
284
332
|
|
|
285
333
|
**Source formats:**
|
|
334
|
+
|
|
286
335
|
- File path: `model.pt`, `./data/output.csv`
|
|
287
336
|
- Directory: `./checkpoints/` (uploads all files recursively)
|
|
288
337
|
- Job reference: `@2` (uploads outputs from step 2)
|
|
@@ -300,6 +349,7 @@ roar get s3://bucket/checkpoints/ ./local/ # Download all files under prefix
|
|
|
300
349
|
```
|
|
301
350
|
|
|
302
351
|
**Options:**
|
|
352
|
+
|
|
303
353
|
- `-m, --message` — Annotation for this download
|
|
304
354
|
- `--hash` — Expected BLAKE3 hash (for verification)
|
|
305
355
|
- `--tag` — Create a git tag for this download
|
|
@@ -331,7 +381,7 @@ roar show ./output/model.pkl # Show artifact by path
|
|
|
331
381
|
|
|
332
382
|
### `roar status`
|
|
333
383
|
|
|
334
|
-
Show a summary of the active session.
|
|
384
|
+
Show a summary of the active session, including the current DAG hash.
|
|
335
385
|
|
|
336
386
|
```bash
|
|
337
387
|
roar status
|
|
@@ -347,6 +397,7 @@ roar pop -y # Pop without confirmation (skip prompt)
|
|
|
347
397
|
```
|
|
348
398
|
|
|
349
399
|
**What it does:**
|
|
400
|
+
|
|
350
401
|
- Removes the last job from the session history
|
|
351
402
|
- Deletes output artifacts created by that job (unless they're packages/system files)
|
|
352
403
|
- Does not affect the original input files
|
|
@@ -397,7 +448,7 @@ Add `.roar/` to your `.gitignore` (roar offers to do this during `roar init`).
|
|
|
397
448
|
|
|
398
449
|
## GLaaS Server
|
|
399
450
|
|
|
400
|
-
Roar can register
|
|
451
|
+
Roar can register sessions, jobs, steps, and artifacts with a GLaaS (Global Lineage-as-a-Service) server using the `roar register` command.
|
|
401
452
|
|
|
402
453
|
### Server Setup
|
|
403
454
|
|
|
@@ -433,6 +484,9 @@ roar auth register
|
|
|
433
484
|
roar auth test
|
|
434
485
|
```
|
|
435
486
|
|
|
487
|
+
> [!TIP]
|
|
488
|
+
> Roar activity can be registered without authentication. Unauthenticated registrations are attributed to a public "anonymous" user, but are not guaranteed persistence. For persistent attribution, we recommend setting up `roar auth`.
|
|
489
|
+
|
|
436
490
|
## Development
|
|
437
491
|
|
|
438
492
|
### Prerequisites
|
|
@@ -4,7 +4,7 @@ build-backend = "maturin"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "roar-cli"
|
|
7
|
-
version = "0.2.
|
|
7
|
+
version = "0.2.11"
|
|
8
8
|
description = "Reproducibility and provenance tracker for ML training pipelines"
|
|
9
9
|
authors = [
|
|
10
10
|
{ name="TReqs Team", email="info@treqs.ai" }
|
|
@@ -38,8 +38,10 @@ classifiers = [
|
|
|
38
38
|
dependencies = [
|
|
39
39
|
"blake3>=0.3.0",
|
|
40
40
|
"click>=8.1.0",
|
|
41
|
+
"cryptography>=42.0.0",
|
|
41
42
|
"dependency-injector>=4.40.0",
|
|
42
43
|
"msgpack>=1.0.0",
|
|
44
|
+
"PyYAML>=6.0",
|
|
43
45
|
"sqlalchemy>=2.0.0",
|
|
44
46
|
"pysqlite3-binary>=0.5.0; sys_platform == 'linux' and platform_machine == 'x86_64'", # Fallback when stdlib sqlite3 unavailable
|
|
45
47
|
"pydantic>=2.0.0",
|
|
@@ -69,7 +71,11 @@ dev = [
|
|
|
69
71
|
[project.scripts]
|
|
70
72
|
# This registers `roar` on PATH after pip install
|
|
71
73
|
roar = "roar.__main__:main"
|
|
72
|
-
roar-worker = "roar.
|
|
74
|
+
roar-worker = "roar.execution.runtime.worker_bootstrap:main"
|
|
75
|
+
|
|
76
|
+
[project.entry-points."roar.execution_backends"]
|
|
77
|
+
ray = "roar.backends.ray.plugin:register"
|
|
78
|
+
osmo = "roar.backends.osmo.plugin:register"
|
|
73
79
|
|
|
74
80
|
[tool.maturin]
|
|
75
81
|
manifest-path = "rust/crates/artifact-hash-py/Cargo.toml"
|
|
@@ -97,11 +103,14 @@ markers = [
|
|
|
97
103
|
"ebpf: Tests requiring eBPF daemon/root privileges",
|
|
98
104
|
"cloud: Tests for cloud storage operations",
|
|
99
105
|
"happy_path: Happy path tests for core functionality",
|
|
106
|
+
"diagnostic: Opt-in diagnostics or aspirational performance budgets outside the default gate",
|
|
107
|
+
"large_pipeline: Stress-style pipeline coverage with larger DAG fixtures",
|
|
108
|
+
"osmo_e2e: OSMO end-to-end tests requiring a Docker Compose managed KIND harness",
|
|
100
109
|
"ray_e2e: Ray end-to-end tests requiring a running Docker cluster",
|
|
101
110
|
"ray_contract: User-facing Ray contract tests using `roar run ray job submit ...`",
|
|
102
111
|
"ray_diagnostic: Diagnostic Ray tests that intentionally inspect internal runtime details",
|
|
103
112
|
]
|
|
104
|
-
addopts = "-v --strict-markers -n auto --dist loadfile --ignore=tests/ebpf --ignore=tests/live_glaas --ignore=tests/benchmarks --ignore=tests/integration --ignore=tests/e2e"
|
|
113
|
+
addopts = "-v --strict-markers -n auto --dist loadfile --ignore=tests/ebpf --ignore=tests/live_glaas --ignore=tests/benchmarks --ignore=tests/e2e --ignore=tests/integration/test_cli_startup.py --ignore=tests/execution/runtime/test_sitecustomize_perf.py --ignore-glob=tests/backends/*/e2e --ignore-glob=tests/backends/*/live"
|
|
105
114
|
timeout = 60
|
|
106
115
|
filterwarnings = [
|
|
107
116
|
"ignore::DeprecationWarning",
|
|
@@ -133,6 +142,7 @@ ignore = ["E501", "B008", "SIM108"]
|
|
|
133
142
|
|
|
134
143
|
[tool.ruff.lint.per-file-ignores]
|
|
135
144
|
"tests/**/*.py" = ["B011", "B017"]
|
|
145
|
+
"tests/backends/*/e2e/jobs/**/*.py" = ["I001"]
|
|
136
146
|
|
|
137
147
|
[tool.ruff.lint.isort]
|
|
138
148
|
known-first-party = ["roar"]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Application workflow entrypoints."""
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"""Application entrypoints for `roar get` workflows."""
|
|
2
|
+
|
|
3
|
+
from .requests import GetRequest
|
|
4
|
+
from .results import GetDownloadedFile, GetDryRunItem, GetResponse
|
|
5
|
+
from .service import get_artifacts
|
|
6
|
+
|
|
7
|
+
__all__ = ["GetDownloadedFile", "GetDryRunItem", "GetRequest", "GetResponse", "get_artifacts"]
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"""Request DTOs for `roar get` application flows."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from dataclasses import dataclass
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
@dataclass(frozen=True)
|
|
10
|
+
class GetRequest:
|
|
11
|
+
"""Application request for a get workflow."""
|
|
12
|
+
|
|
13
|
+
source: str
|
|
14
|
+
destination: Path
|
|
15
|
+
roar_dir: Path
|
|
16
|
+
cwd: Path
|
|
17
|
+
repo_root: Path | None = None
|
|
18
|
+
message: str | None = None
|
|
19
|
+
expected_hash: str | None = None
|
|
20
|
+
dry_run: bool = False
|
|
21
|
+
force: bool = False
|
|
22
|
+
tag: bool = False
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"""Typed result DTOs for `roar get` application flows."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from dataclasses import dataclass, field
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@dataclass(frozen=True)
|
|
9
|
+
class GetDownloadedFile:
|
|
10
|
+
remote_url: str
|
|
11
|
+
local_path: str
|
|
12
|
+
hash: str | None = None
|
|
13
|
+
size: int | None = None
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@dataclass(frozen=True)
|
|
17
|
+
class GetDryRunItem:
|
|
18
|
+
remote_url: str
|
|
19
|
+
local_path: str
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
@dataclass(frozen=True)
|
|
23
|
+
class GetResponse:
|
|
24
|
+
"""Application response for a get workflow."""
|
|
25
|
+
|
|
26
|
+
success: bool
|
|
27
|
+
source: str
|
|
28
|
+
job_id: int | None = None
|
|
29
|
+
job_uid: str | None = None
|
|
30
|
+
downloaded_files: list[GetDownloadedFile] = field(default_factory=list)
|
|
31
|
+
dry_run: bool = False
|
|
32
|
+
would_download: list[GetDryRunItem] = field(default_factory=list)
|
|
33
|
+
git_tag: str | None = None
|
|
34
|
+
warnings: list[str] = field(default_factory=list)
|
|
35
|
+
error: str | None = None
|