rosotacom-dev 2.5.dev24__tar.gz → 2.5.dev27__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.
- rosotacom_dev-2.5.dev27/.github/actions/setup-just/action.yml +34 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.github/workflows/benchmark-calibrate.yml +11 -10
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.github/workflows/benchmark-gate.yml +11 -10
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.github/workflows/dev-release.yml +1 -3
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.github/workflows/image-scan.yml +1 -3
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.github/workflows/nightly-e2e.yml +18 -8
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.github/workflows/pr-lightweight.yml +1 -3
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.github/workflows/pr-merge-gate.yml +58 -49
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.github/workflows/release.yml +11 -10
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/CONCURRENCY.md +20 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/PKG-INFO +10 -1
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/README.md +9 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/ci.md +44 -10
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/cli.py +73 -8
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom_dev.egg-info/PKG-INFO +10 -1
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom_dev.egg-info/SOURCES.txt +1 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom_dev.egg-info/scm_file_list.json +1 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom_dev.egg-info/scm_version.json +2 -2
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/contract/test_security_maintenance_config.py +3 -3
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/contract/test_workflow_contracts.py +54 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/e2e/conftest.py +21 -16
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_cli.py +59 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_concurrency.py +128 -2
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.devcontainer/devcontainer.json.template +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.devcontainer/re_generate_devcontainer_json.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.github/CODEOWNERS +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.github/ISSUE_TEMPLATE/documentation-audit.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.github/ISSUE_TEMPLATE/implementation-cleanup.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.github/ISSUE_TEMPLATE/quality-workflow.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.github/ISSUE_TEMPLATE/redesign.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.github/ISSUE_TEMPLATE/release-process.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.github/ISSUE_TEMPLATE/repository-diagnosis.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.github/ISSUE_TEMPLATE/test-ci-audit.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.github/ISSUE_TEMPLATE/work-item.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.github/dependabot.yml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.pre-commit-config.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/AGENTS.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/CONTRIBUTING.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/DEVELOPMENT_PRINCIPLES.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/LICENSE.txt +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/MANIFEST.in +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/budgets.jsonl +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/calibration/README.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/calibration/capacity-size-tight-cyclone.json +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/calibration/probe-loss-gop-tight-cyclone.json +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/calibration/probe-loss-nominal-cyclone.json +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/calibration/probe-loss-tight-cyclone.json +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/calibration/probe-loss-tight-fastdds.json +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/calibration/probe-loss-tight-zenoh.json +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/codecov.yml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/deployment-configuration.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/benchmark-ab.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/benchmark-bag-as-load.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/ffmpeg-keyframes.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/findings/README.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/findings/cyclone-spdp-discovery-bursts.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/findings/delay-alone-no-loss.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/findings/head-of-line-irregularity.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/findings/jitter-loss-bandwidth-latency.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/findings/lighter-message-loss.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/findings/zero-loss-boundaries-18kb-20hz.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/forensics-report.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/geo-link-map.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/github-repository-settings.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/link-trace.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/owner-runbook.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/performance-bands.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/playbooks/README.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/quality-model.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/release-notes/TEMPLATE.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/release-notes/v2.1.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/release-notes/v2.2.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/release-notes/v2.3.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/release-notes/v2.4.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/release.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/rfcs/0001-expectation-driven-test-suite.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/rfcs/0002-expectation-concepts.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/rfcs/0003-metric-backbone.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/rfcs/0004-network-profiles.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/rfcs/0005-benchmark-genres-and-ci.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/rfcs/0006-dynamic-qos.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/rfcs/0007-regression-gate.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/rfcs/README.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/testing.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/work-items.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/install.sh +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/justfile +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/media/control_center.png +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/media/echo_test.png +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/media/forensics-report-example.png +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/media/host.png +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/media/vehicle.png +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/pyproject.toml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/requirements.txt +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/rosotacom.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/run_session_in_container.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/session-configuration.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/setup.cfg +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/__init__.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/__main__.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/anonymize.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/bag_ground_truth.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/benched_set.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/benchmark.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/benchmark_delta.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/bundle_check.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/cli_benchmark.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/deployment.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/ffmpeg_packet.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/forensics.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/geomap.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/image_cache.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/network_profiles.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/network_shaper.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/plots.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/py.typed +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/benched-set.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/.gitignore +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/README.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/__init__.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/bags/8_drop_reference/metadata.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/deployment.example.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/profiles.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/rosotacom.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scenarios/2_native_chatter/scenario-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/1_heartbeat/run_machine_a.sh +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/1_heartbeat/run_machine_b.sh +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/run_external.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/wait_for_echo_topic.sh +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_b/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_b/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_b/run_external.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/external_session.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/foxglove.json +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/run_external.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/costmap_1second/costmap_1second_0.mcap +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/costmap_1second/metadata.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/run_external.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/external_session.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/foxglove.json +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/run_external.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/costmap_1second/costmap_1second_0.mcap +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/costmap_1second/metadata.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/run_external.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/external_session.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/run_external.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/external_session.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/run_external.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/external_session.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/run_external.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/external_session.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/run_external.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/10_restamp/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/11_trickle/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/12_content_integrity/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/13_link_latency/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/14_remote_assist_anonymized/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/15_remote_assist_anonymized_costmap/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/16_remote_assist_anonymized_camera/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/17_synthetic_camera_quality/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/1_heartbeat/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/1_heartbeat_status/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/2_native_chatter/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/3_comp_occ_grid/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/4_comp_occ_grid_zen/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/5_sized_payload/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/6_sized_payload_zen/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/7_latched_static/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/8_drop/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/9_throttle/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/bench_1_1_capacity/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/bench_1_2_load_sweep/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/bench_1_3_ramp/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/bench_1_4_recovery/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/bench_1_5_camera/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ros2docker.json.example +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/.vscode/c_cpp_properties.json +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/.vscode/settings.json +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_easy_mode.xml.template +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_initial_peer_list.xml.template +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v2.xml.template +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v3.xml.template +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v4.xml.template +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v5.xml.template +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ota_configs/create_zenoh_json5.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ota_configs/cyclonedds_minimal.xml.template +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ota_configs/cyclonedds_tuned.xml.template +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ota_configs/fastdds_unicast.xml.template +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ota_configs/get_ota_xml.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ota_configs/utils.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ota_configs/zenoh.json5.template +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/.gitkeep +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_cpp/CMakeLists.txt +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_cpp/COLCON_IGNORE +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_cpp/LICENSE.txt +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_cpp/package.xml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_cpp/src/hz_monitor.cpp +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_cpp/src/universal_compressor.cpp +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_cpp/src/universal_decompressor.cpp +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_msgs/CMakeLists.txt +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_msgs/LICENSE.txt +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/CompressedData.msg +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/EchoHeartbeat.msg +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/OtaStamped.msg +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/SizedPayload.msg +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_msgs/package.xml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/LICENSE.txt +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/__init__.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/base_bridge_relay.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/bridge_in.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/bridge_out.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/heartbeat_echo.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/hz_monitor.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/image_bandwidth_reducer.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/image_pixel_capper.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/lanelet_saver.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/latch_relay.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/costmap_remapper.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/marker_remapper.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/speed_test.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/tf_remapper.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/traffic_monitor.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/wifi_network_analysis_1.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/link_bytes.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/link_trace.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/local_global_frame_bridge.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/localization_map_split_reduce_saver.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/msg_transform.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/pair_management.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/pub_sub_pair.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/qos.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/relay_in.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/relay_out.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/restamp.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/sized_publisher.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/stage_latency.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/stage_latency_core.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/status_overview.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/status_overview_core.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/tf_map_to_cart_saver.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/topic_monitor.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/topic_resolution.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/trickle.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_compressor.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_decompressor.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_ota_unwrapper.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_ota_wrapper.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/package.xml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/resource/com_py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/setup.cfg +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/setup.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/test/test_copyright.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/test/test_flake8.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/test/test_pep257.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/session/content/base/session_plugin_base.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/session/content/network/up_connectivity.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/session/content/network/wifi_network_analysis_2.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/session/creation/anonymize_bag.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/session/creation/catmux_log_setup.sh +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/session/creation/create_session_yaml.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/session/creation/generate_session_files.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/session/creation/run_session.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/session/creation/run_session_in_external_terminal.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/session/creation/strip_ansi.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/status_eval.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/stream_stats.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/trace_profiles.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/transit.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/video_quality.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom_dev.egg-info/dependency_links.txt +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom_dev.egg-info/entry_points.txt +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom_dev.egg-info/requires.txt +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom_dev.egg-info/top_level.txt +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/stop_session_in_container.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/terminology.md +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/contract/test_benched_set_registry.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/contract/test_findings.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/contract/test_markdown_links.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/contract/test_ota_source_bundle.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/contract/test_package_metadata.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/contract/test_packaged_resources.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/contract/test_profile_covers_generated_commands.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/contract/test_pytest_policy.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/contract/test_readme_examples.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/contract/test_session_configuration_doc.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/e2e/test_anonymize_e2e.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/e2e/test_benchmark_ab.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/e2e/test_benchmark_capacity.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/e2e/test_benchmark_replay.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/e2e/test_parallel_smoke.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/e2e/test_smoke.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/e2e/test_timeline_stepping.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/e2e/test_video_quality_e2e.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/sessions/generate_rmw_matrix.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/sessions/rmw_matrix/1_heartbeat_cyclone-local_zenoh-ros2dds-ota/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/sessions/rmw_matrix/1_heartbeat_cyclone-ota/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/sessions/rmw_matrix/1_heartbeat_cyclone-ota-tuned/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/sessions/rmw_matrix/1_heartbeat_fastdds/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/sessions/rmw_matrix/1_heartbeat_zen-endpoints/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_anonymize.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_bag_ground_truth.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_benched_set.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_benchmark.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_benchmark_delta.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_bundle_check.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_cli_benchmark.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_deployment.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_ffmpeg_packet.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_forensics.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_geomap.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_image_cache.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_link_bytes.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_link_trace.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_network_profiles.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_network_shaper.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_ota_xml.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_plots.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_stage_latency.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_status_eval.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_status_overview.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_stream_stats.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_trace_profiles.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_transit.py +0 -0
- {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_video_quality.py +0 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
name: Set up just
|
|
2
|
+
description: >
|
|
3
|
+
Install a pinned just release, verified by checksum.
|
|
4
|
+
|
|
5
|
+
Nineteen jobs used to reach it with `apt-get update && apt-get install -y
|
|
6
|
+
just`, and almost all of that step's 9-15s was the index refresh — in every
|
|
7
|
+
job, including all thirteen e2e slices, where it sat on the merge gate's
|
|
8
|
+
critical path. A release tarball is ~2s.
|
|
9
|
+
|
|
10
|
+
It also stops the CI toolchain drifting: apt gave whatever noble currently
|
|
11
|
+
ships (1.21.0 at the time of writing), which changes without anything here
|
|
12
|
+
saying so.
|
|
13
|
+
|
|
14
|
+
runs:
|
|
15
|
+
using: composite
|
|
16
|
+
steps:
|
|
17
|
+
- name: Install just
|
|
18
|
+
shell: bash
|
|
19
|
+
run: |
|
|
20
|
+
set -euo pipefail
|
|
21
|
+
JUST_VERSION="1.58.0"
|
|
22
|
+
CHECKSUM="4a5cc2f53e6f0f8c59092a6cc38291eb729d46a7dd95d3ae582008881b84931d"
|
|
23
|
+
URL="https://github.com/casey/just/releases/download/${JUST_VERSION}/just-${JUST_VERSION}-x86_64-unknown-linux-musl.tar.gz"
|
|
24
|
+
# Unpacked outside the checkout: a stray tarball in the working tree is
|
|
25
|
+
# a thing every later step has to not trip over.
|
|
26
|
+
workdir="$(mktemp -d)"
|
|
27
|
+
# --fail, or a transient HTTP error body is saved as the tarball and
|
|
28
|
+
# reported as a checksum mismatch, which reads like a tampered release.
|
|
29
|
+
curl -sSLf --retry 3 --retry-all-errors -o "$workdir/just.tar.gz" "$URL"
|
|
30
|
+
echo "${CHECKSUM} $workdir/just.tar.gz" | sha256sum --check
|
|
31
|
+
tar -xzf "$workdir/just.tar.gz" -C "$workdir" just
|
|
32
|
+
sudo mv "$workdir/just" /usr/local/bin/just
|
|
33
|
+
rm -rf "$workdir"
|
|
34
|
+
just --version
|
{rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.github/workflows/benchmark-calibrate.yml
RENAMED
|
@@ -44,9 +44,7 @@ jobs:
|
|
|
44
44
|
cache: pip
|
|
45
45
|
|
|
46
46
|
- name: Install just
|
|
47
|
-
|
|
48
|
-
sudo apt-get update
|
|
49
|
-
sudo apt-get install -y just
|
|
47
|
+
uses: ./.github/actions/setup-just
|
|
50
48
|
|
|
51
49
|
- name: Set up local environment
|
|
52
50
|
run: just setup
|
|
@@ -87,10 +85,15 @@ jobs:
|
|
|
87
85
|
python-version: "3.12"
|
|
88
86
|
cache: pip
|
|
89
87
|
|
|
90
|
-
- name: Install just
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
88
|
+
- name: Install just
|
|
89
|
+
uses: ./.github/actions/setup-just
|
|
90
|
+
|
|
91
|
+
- name: Ensure tmux
|
|
92
|
+
# Preinstalled on the GitHub-hosted image, so this is a probe
|
|
93
|
+
# rather than an install — but the dependency is named, so a
|
|
94
|
+
# runner image that drops it fails here instead of inside a
|
|
95
|
+
# session.
|
|
96
|
+
run: command -v tmux >/dev/null || { sudo apt-get update && sudo apt-get install -y tmux; }
|
|
94
97
|
|
|
95
98
|
- name: Set up local environment
|
|
96
99
|
run: just setup
|
|
@@ -132,9 +135,7 @@ jobs:
|
|
|
132
135
|
cache: pip
|
|
133
136
|
|
|
134
137
|
- name: Install just
|
|
135
|
-
|
|
136
|
-
sudo apt-get update
|
|
137
|
-
sudo apt-get install -y just
|
|
138
|
+
uses: ./.github/actions/setup-just
|
|
138
139
|
|
|
139
140
|
- name: Set up local environment
|
|
140
141
|
run: just setup
|
|
@@ -50,9 +50,7 @@ jobs:
|
|
|
50
50
|
cache: pip
|
|
51
51
|
|
|
52
52
|
- name: Install just
|
|
53
|
-
|
|
54
|
-
sudo apt-get update
|
|
55
|
-
sudo apt-get install -y just
|
|
53
|
+
uses: ./.github/actions/setup-just
|
|
56
54
|
|
|
57
55
|
- name: Set up local environment
|
|
58
56
|
run: just setup
|
|
@@ -87,10 +85,15 @@ jobs:
|
|
|
87
85
|
python-version: "3.12"
|
|
88
86
|
cache: pip
|
|
89
87
|
|
|
90
|
-
- name: Install just
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
88
|
+
- name: Install just
|
|
89
|
+
uses: ./.github/actions/setup-just
|
|
90
|
+
|
|
91
|
+
- name: Ensure tmux
|
|
92
|
+
# Preinstalled on the GitHub-hosted image, so this is a probe
|
|
93
|
+
# rather than an install — but the dependency is named, so a
|
|
94
|
+
# runner image that drops it fails here instead of inside a
|
|
95
|
+
# session.
|
|
96
|
+
run: command -v tmux >/dev/null || { sudo apt-get update && sudo apt-get install -y tmux; }
|
|
94
97
|
|
|
95
98
|
- name: Set up local environment
|
|
96
99
|
run: just setup
|
|
@@ -142,9 +145,7 @@ jobs:
|
|
|
142
145
|
cache: pip
|
|
143
146
|
|
|
144
147
|
- name: Install just
|
|
145
|
-
|
|
146
|
-
sudo apt-get update
|
|
147
|
-
sudo apt-get install -y just
|
|
148
|
+
uses: ./.github/actions/setup-just
|
|
148
149
|
|
|
149
150
|
- name: Set up local environment
|
|
150
151
|
run: just setup
|
|
@@ -51,10 +51,15 @@ jobs:
|
|
|
51
51
|
python-version: "3.12"
|
|
52
52
|
cache: pip
|
|
53
53
|
|
|
54
|
-
- name: Install just
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
54
|
+
- name: Install just
|
|
55
|
+
uses: ./.github/actions/setup-just
|
|
56
|
+
|
|
57
|
+
- name: Ensure tmux
|
|
58
|
+
# Preinstalled on the GitHub-hosted image, so this is a probe
|
|
59
|
+
# rather than an install — but the dependency is named, so a
|
|
60
|
+
# runner image that drops it fails here instead of inside a
|
|
61
|
+
# session.
|
|
62
|
+
run: command -v tmux >/dev/null || { sudo apt-get update && sudo apt-get install -y tmux; }
|
|
58
63
|
|
|
59
64
|
- name: Set up local environment
|
|
60
65
|
run: just setup
|
|
@@ -98,10 +103,15 @@ jobs:
|
|
|
98
103
|
python-version: "3.12"
|
|
99
104
|
cache: pip
|
|
100
105
|
|
|
101
|
-
- name: Install just
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
106
|
+
- name: Install just
|
|
107
|
+
uses: ./.github/actions/setup-just
|
|
108
|
+
|
|
109
|
+
- name: Ensure tmux
|
|
110
|
+
# Preinstalled on the GitHub-hosted image, so this is a probe
|
|
111
|
+
# rather than an install — but the dependency is named, so a
|
|
112
|
+
# runner image that drops it fails here instead of inside a
|
|
113
|
+
# session.
|
|
114
|
+
run: command -v tmux >/dev/null || { sudo apt-get update && sudo apt-get install -y tmux; }
|
|
105
115
|
|
|
106
116
|
- name: Set up local environment
|
|
107
117
|
run: just setup
|
|
@@ -71,9 +71,7 @@ jobs:
|
|
|
71
71
|
cache: pip
|
|
72
72
|
|
|
73
73
|
- name: Install just
|
|
74
|
-
|
|
75
|
-
sudo apt-get update
|
|
76
|
-
sudo apt-get install -y just
|
|
74
|
+
uses: ./.github/actions/setup-just
|
|
77
75
|
|
|
78
76
|
- name: Set up local environment
|
|
79
77
|
run: just setup
|
|
@@ -102,9 +100,7 @@ jobs:
|
|
|
102
100
|
cache: pip
|
|
103
101
|
|
|
104
102
|
- name: Install just
|
|
105
|
-
|
|
106
|
-
sudo apt-get update
|
|
107
|
-
sudo apt-get install -y just
|
|
103
|
+
uses: ./.github/actions/setup-just
|
|
108
104
|
|
|
109
105
|
- name: Set up local environment
|
|
110
106
|
run: just setup
|
|
@@ -152,9 +148,7 @@ jobs:
|
|
|
152
148
|
cache: pip
|
|
153
149
|
|
|
154
150
|
- name: Install just
|
|
155
|
-
|
|
156
|
-
sudo apt-get update
|
|
157
|
-
sudo apt-get install -y just
|
|
151
|
+
uses: ./.github/actions/setup-just
|
|
158
152
|
|
|
159
153
|
- name: Set up local environment
|
|
160
154
|
run: just setup
|
|
@@ -162,35 +156,46 @@ jobs:
|
|
|
162
156
|
- name: Validate package
|
|
163
157
|
run: just package
|
|
164
158
|
|
|
165
|
-
|
|
166
|
-
|
|
159
|
+
quick-gate:
|
|
160
|
+
# Everything `e2e` waits for that is not the image, and deliberately no
|
|
161
|
+
# more. It exists to answer one question — is the tree obviously broken,
|
|
162
|
+
# such that thirteen slices would burn seventy runner-minutes to say so.
|
|
163
|
+
#
|
|
164
|
+
# It replaced a `needs: preflight-success` edge that made e2e wait for the
|
|
165
|
+
# whole five-version matrix. That barrier cost 2.15 min of every gate run
|
|
166
|
+
# and had fired once in sixty runs, on `workflow-lint`, which takes 0.12
|
|
167
|
+
# min; the 2.0 min of `merge-lightweight` that set its height has never
|
|
168
|
+
# stopped an e2e round, and its expensive part is `test-nondocker-cov`
|
|
169
|
+
# (38s of 45s), which is a test suite rather than a tripwire.
|
|
170
|
+
#
|
|
171
|
+
# `lint` and `typecheck` are 4s together. The rest of this job is the fixed
|
|
172
|
+
# cost every job pays, which is also what `image` pays — so sizing the
|
|
173
|
+
# tripwire this way makes it free: e2e could not start before `image`
|
|
174
|
+
# finished anyway. Nothing merges on a weaker check than before, because
|
|
175
|
+
# `ci-success` still requires every preflight job.
|
|
176
|
+
name: quick-gate
|
|
167
177
|
runs-on: ubuntu-latest
|
|
168
|
-
|
|
169
|
-
if: always() && (github.event_name != 'pull_request' || github.event.pull_request.draft == false)
|
|
178
|
+
if: github.event_name != 'pull_request' || github.event.pull_request.draft == false
|
|
170
179
|
steps:
|
|
171
|
-
- name: Check
|
|
180
|
+
- name: Check out repository
|
|
181
|
+
uses: actions/checkout@v6
|
|
182
|
+
|
|
183
|
+
- name: Set up Python
|
|
184
|
+
uses: actions/setup-python@v6
|
|
185
|
+
with:
|
|
186
|
+
python-version: "3.12"
|
|
187
|
+
cache: pip
|
|
188
|
+
|
|
189
|
+
- name: Install just
|
|
190
|
+
uses: ./.github/actions/setup-just
|
|
191
|
+
|
|
192
|
+
- name: Set up local environment
|
|
193
|
+
run: just setup
|
|
194
|
+
|
|
195
|
+
- name: Is the tree obviously broken
|
|
172
196
|
run: |
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
exit 1
|
|
176
|
-
fi
|
|
177
|
-
if [[ "${{ github.event_name }}" == "pull_request" && "${{ needs.dependency-review.result }}" != "success" ]]; then
|
|
178
|
-
echo "dependency-review failed: ${{ needs.dependency-review.result }}"
|
|
179
|
-
exit 1
|
|
180
|
-
fi
|
|
181
|
-
if [[ "${{ needs.build-lint.result }}" != "success" ]]; then
|
|
182
|
-
echo "build-lint failed: ${{ needs.build-lint.result }}"
|
|
183
|
-
exit 1
|
|
184
|
-
fi
|
|
185
|
-
if [[ "${{ needs.merge-lightweight.result }}" != "success" ]]; then
|
|
186
|
-
echo "merge-lightweight failed: ${{ needs.merge-lightweight.result }}"
|
|
187
|
-
exit 1
|
|
188
|
-
fi
|
|
189
|
-
if [[ "${{ needs.package.result }}" != "success" ]]; then
|
|
190
|
-
echo "package failed: ${{ needs.package.result }}"
|
|
191
|
-
exit 1
|
|
192
|
-
fi
|
|
193
|
-
echo "All preflight checks passed"
|
|
197
|
+
just lint
|
|
198
|
+
just typecheck
|
|
194
199
|
|
|
195
200
|
image:
|
|
196
201
|
# Publish the images the e2e suite builds, once per set of build inputs,
|
|
@@ -208,8 +213,9 @@ jobs:
|
|
|
208
213
|
# is stale" is not a state this can reach — which is the objection #226
|
|
209
214
|
# raised against caching the image inline.
|
|
210
215
|
#
|
|
211
|
-
# Runs beside preflight rather than after
|
|
212
|
-
# manifests and stops
|
|
216
|
+
# Runs beside the preflight jobs rather than after them: on a hit it
|
|
217
|
+
# inspects two manifests and stops. It is what sets when `e2e` can
|
|
218
|
+
# start, which is why `quick-gate` is sized to finish inside it.
|
|
213
219
|
name: image
|
|
214
220
|
runs-on: ubuntu-latest
|
|
215
221
|
timeout-minutes: 60
|
|
@@ -231,9 +237,7 @@ jobs:
|
|
|
231
237
|
cache: pip
|
|
232
238
|
|
|
233
239
|
- name: Install just
|
|
234
|
-
|
|
235
|
-
sudo apt-get update
|
|
236
|
-
sudo apt-get install -y just
|
|
240
|
+
uses: ./.github/actions/setup-just
|
|
237
241
|
|
|
238
242
|
- name: Set up local environment
|
|
239
243
|
run: just setup
|
|
@@ -300,8 +304,8 @@ jobs:
|
|
|
300
304
|
name: e2e-${{ matrix.slice }}
|
|
301
305
|
runs-on: ubuntu-latest
|
|
302
306
|
timeout-minutes: 90
|
|
303
|
-
needs: [
|
|
304
|
-
if: always() && !cancelled() && needs.
|
|
307
|
+
needs: [quick-gate, image]
|
|
308
|
+
if: always() && !cancelled() && needs.quick-gate.result == 'success' && needs.image.result == 'success'
|
|
305
309
|
permissions:
|
|
306
310
|
contents: read
|
|
307
311
|
packages: read
|
|
@@ -322,10 +326,15 @@ jobs:
|
|
|
322
326
|
python-version: "3.12"
|
|
323
327
|
cache: pip
|
|
324
328
|
|
|
325
|
-
- name: Install just
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
+
- name: Install just
|
|
330
|
+
uses: ./.github/actions/setup-just
|
|
331
|
+
|
|
332
|
+
- name: Ensure tmux
|
|
333
|
+
# Preinstalled on the GitHub-hosted image, so this is a probe
|
|
334
|
+
# rather than an install — but the dependency is named, so a
|
|
335
|
+
# runner image that drops it fails here instead of inside a
|
|
336
|
+
# session.
|
|
337
|
+
run: command -v tmux >/dev/null || { sudo apt-get update && sudo apt-get install -y tmux; }
|
|
329
338
|
|
|
330
339
|
- name: Set up local environment
|
|
331
340
|
run: just setup
|
|
@@ -364,7 +373,7 @@ jobs:
|
|
|
364
373
|
- build-lint
|
|
365
374
|
- merge-lightweight
|
|
366
375
|
- package
|
|
367
|
-
-
|
|
376
|
+
- quick-gate
|
|
368
377
|
- image
|
|
369
378
|
- e2e
|
|
370
379
|
if: always() && (github.event_name != 'pull_request' || github.event.pull_request.draft == false)
|
|
@@ -392,8 +401,8 @@ jobs:
|
|
|
392
401
|
echo "package failed or was skipped: ${{ needs.package.result }}"
|
|
393
402
|
exit 1
|
|
394
403
|
fi
|
|
395
|
-
if [[ "${{ needs.
|
|
396
|
-
echo "
|
|
404
|
+
if [[ "${{ needs.quick-gate.result }}" != "success" ]]; then
|
|
405
|
+
echo "quick-gate failed or was skipped: ${{ needs.quick-gate.result }}"
|
|
397
406
|
exit 1
|
|
398
407
|
fi
|
|
399
408
|
if [[ "${{ needs.image.result }}" != "success" ]]; then
|
|
@@ -35,9 +35,7 @@ jobs:
|
|
|
35
35
|
cache: pip
|
|
36
36
|
|
|
37
37
|
- name: Install just
|
|
38
|
-
|
|
39
|
-
sudo apt-get update
|
|
40
|
-
sudo apt-get install -y just
|
|
38
|
+
uses: ./.github/actions/setup-just
|
|
41
39
|
|
|
42
40
|
- name: Set up local environment
|
|
43
41
|
run: just setup
|
|
@@ -67,9 +65,7 @@ jobs:
|
|
|
67
65
|
cache: pip
|
|
68
66
|
|
|
69
67
|
- name: Install just
|
|
70
|
-
|
|
71
|
-
sudo apt-get update
|
|
72
|
-
sudo apt-get install -y just
|
|
68
|
+
uses: ./.github/actions/setup-just
|
|
73
69
|
|
|
74
70
|
- name: Set up local environment
|
|
75
71
|
run: just setup
|
|
@@ -139,10 +135,15 @@ jobs:
|
|
|
139
135
|
python-version: "3.12"
|
|
140
136
|
cache: pip
|
|
141
137
|
|
|
142
|
-
- name: Install just
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
138
|
+
- name: Install just
|
|
139
|
+
uses: ./.github/actions/setup-just
|
|
140
|
+
|
|
141
|
+
- name: Ensure tmux
|
|
142
|
+
# Preinstalled on the GitHub-hosted image, so this is a probe
|
|
143
|
+
# rather than an install — but the dependency is named, so a
|
|
144
|
+
# runner image that drops it fails here instead of inside a
|
|
145
|
+
# session.
|
|
146
|
+
run: command -v tmux >/dev/null || { sudo apt-get update && sudo apt-get install -y tmux; }
|
|
146
147
|
|
|
147
148
|
- name: Set up local environment
|
|
148
149
|
run: just setup
|
|
@@ -39,6 +39,26 @@ commands *discover* the matching containers from Docker instead of recomputing
|
|
|
39
39
|
fixed names — they clean up every instance for the requested identity/target,
|
|
40
40
|
including leftovers from crashed runs.
|
|
41
41
|
|
|
42
|
+
## Opting out: fixed, human-readable names
|
|
43
|
+
|
|
44
|
+
A project whose machines are read by people rather than by CI — a demo or
|
|
45
|
+
operations project — can set `com_container_prefix` in its `rosotacom.yaml`:
|
|
46
|
+
|
|
47
|
+
```yaml
|
|
48
|
+
com_container_prefix: remote-assist
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Session communication containers are then named
|
|
52
|
+
`<prefix>_com-to-<remote-peer>` (e.g. `remote-assist_com-to-center`): stable
|
|
53
|
+
across runs and legible in `docker ps`, at the price of parallelism — a second
|
|
54
|
+
start of the same session on the same host is a name conflict. That conflict is
|
|
55
|
+
detected in the same preflight as everything else: `--force` (the session
|
|
56
|
+
default) replaces the running container, `--no-force` aborts with its name.
|
|
57
|
+
Conflict discovery matches **both** naming schemes, so a leftover
|
|
58
|
+
instance-scoped container is still found and replaced after a project switches
|
|
59
|
+
modes. Test and CI projects should leave the key unset and keep the
|
|
60
|
+
collision-free instance-scoped names.
|
|
61
|
+
|
|
42
62
|
## How conflicts are detected (fail-safe preflight)
|
|
43
63
|
|
|
44
64
|
Each start command checks Docker before it allocates anything, and aborts with
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: rosotacom-dev
|
|
3
|
-
Version: 2.5.
|
|
3
|
+
Version: 2.5.dev27
|
|
4
4
|
Summary: Host CLI for ROS OTA communication sessions.
|
|
5
5
|
Author: develNor
|
|
6
6
|
License-Expression: BSD-3-Clause
|
|
@@ -227,6 +227,15 @@ scripts/
|
|
|
227
227
|
project-local directories first and shared/example directories later when one
|
|
228
228
|
project should discover both.
|
|
229
229
|
|
|
230
|
+
`com_container_prefix` (optional) trades concurrency for readability: when set,
|
|
231
|
+
session communication containers get the stable name
|
|
232
|
+
`<prefix>_com-to-<remote-peer>` (e.g. `remote-assist_com-to-center`) instead of
|
|
233
|
+
the default workspace- and instance-scoped unique name. Set it in projects whose
|
|
234
|
+
machines are read by people (`docker ps` during a demo, next to colleagues'
|
|
235
|
+
containers); leave it unset in test/CI projects, where concurrent instances must
|
|
236
|
+
never collide on a name. [CONCURRENCY.md](CONCURRENCY.md) has the exact
|
|
237
|
+
conflict semantics.
|
|
238
|
+
|
|
230
239
|
### Locating packaged resources
|
|
231
240
|
|
|
232
241
|
rosotacom is installed in an isolated environment (pipx, or a project venv), so
|
|
@@ -182,6 +182,15 @@ scripts/
|
|
|
182
182
|
project-local directories first and shared/example directories later when one
|
|
183
183
|
project should discover both.
|
|
184
184
|
|
|
185
|
+
`com_container_prefix` (optional) trades concurrency for readability: when set,
|
|
186
|
+
session communication containers get the stable name
|
|
187
|
+
`<prefix>_com-to-<remote-peer>` (e.g. `remote-assist_com-to-center`) instead of
|
|
188
|
+
the default workspace- and instance-scoped unique name. Set it in projects whose
|
|
189
|
+
machines are read by people (`docker ps` during a demo, next to colleagues'
|
|
190
|
+
containers); leave it unset in test/CI projects, where concurrent instances must
|
|
191
|
+
never collide on a name. [CONCURRENCY.md](CONCURRENCY.md) has the exact
|
|
192
|
+
conflict semantics.
|
|
193
|
+
|
|
185
194
|
### Locating packaged resources
|
|
186
195
|
|
|
187
196
|
rosotacom is installed in an isolated environment (pipx, or a project venv), so
|
|
@@ -48,6 +48,31 @@ The merge gate runs workflow lint, dependency/security review, runtime/build ass
|
|
|
48
48
|
Python 3.10–3.14 are supported for the host CLI; Python 3.12 is the reference
|
|
49
49
|
interpreter for packaging and Docker E2E jobs.
|
|
50
50
|
|
|
51
|
+
### What the e2e slices wait for
|
|
52
|
+
|
|
53
|
+
Every job in the gate starts at once — there is no runner contention — so the
|
|
54
|
+
only thing that decides when the thirteen slices start is their `needs`. They
|
|
55
|
+
wait for exactly two jobs:
|
|
56
|
+
|
|
57
|
+
- **`image`**, because a slice adopts the published image rather than building
|
|
58
|
+
it, so it cannot start before that image is known to exist. On a hit this is
|
|
59
|
+
two manifest inspections, and it is what sets the floor.
|
|
60
|
+
- **`quick-gate`**, `just lint && just typecheck` on one interpreter: the
|
|
61
|
+
cheapest signal that the tree is not obviously broken, so thirteen runners do
|
|
62
|
+
not spend seventy minutes discovering a syntax error. Four seconds of work,
|
|
63
|
+
sized to finish inside `image` and therefore free.
|
|
64
|
+
|
|
65
|
+
They used to wait for `preflight-success`, which meant the whole five-version
|
|
66
|
+
`merge-lightweight` matrix, and that cost **2.15 min of every gate run**.
|
|
67
|
+
Measured against the sixty runs before #248, it had stopped an e2e round once,
|
|
68
|
+
on `workflow-lint` — 0.12 min of the 2.15. Nothing about what may merge
|
|
69
|
+
changed: `ci-success` still requires `workflow-lint`, `build-lint`,
|
|
70
|
+
`merge-lightweight`, `package`, `quick-gate`, `image`, and `e2e`, and it is the
|
|
71
|
+
only required check in branch protection.
|
|
72
|
+
|
|
73
|
+
`tests/contract/test_workflow_contracts.py::test_e2e_waits_only_for_the_cheap_gate_and_the_image`
|
|
74
|
+
keeps the barrier from growing back.
|
|
75
|
+
|
|
51
76
|
```bash
|
|
52
77
|
just lint-workflows
|
|
53
78
|
just lint-build
|
|
@@ -159,26 +184,35 @@ with a usage error, and a test owned twice fails
|
|
|
159
184
|
|
|
160
185
|
The costs are warm pytest `call` durations — medians over seven merge-gate runs
|
|
161
186
|
of 2026-08-11/12. On top of them each job pays a fixed
|
|
162
|
-
`RUNNER_SETUP_SECONDS + IMAGE_BUILD_SECONDS` (
|
|
187
|
+
`RUNNER_SETUP_SECONDS + IMAGE_BUILD_SECONDS` (1m19s: 46s outside the tests, then
|
|
163
188
|
the project image obtained inside whichever test runs first). Because that
|
|
164
189
|
constant is per job and not per test, balancing warm costs balances wall clock.
|
|
165
190
|
|
|
166
191
|
`IMAGE_BUILD_SECONDS` models the merge gate, where that image is pulled rather
|
|
167
192
|
than built (see above); the release and nightly lanes still build and pay the
|
|
168
|
-
older 154s.
|
|
169
|
-
|
|
170
|
-
|
|
193
|
+
older 154s. It has now been re-measured twice, because both changes that made
|
|
194
|
+
it smaller were changes to what a job moves rather than to what it runs: 154 →
|
|
195
|
+
70 when #236 replaced the build with a pull, and 70 → 33 when #245 rebased the
|
|
196
|
+
image on `ros-base` and the published project image went 1640 MB → 957 MB.
|
|
197
|
+
Runs 31681061779 and 31687149587 ran the same partition either side of that, so
|
|
198
|
+
the paired per-slice difference measures it directly: median −37.4s over all
|
|
199
|
+
thirteen.
|
|
171
200
|
|
|
172
201
|
### How many slices
|
|
173
202
|
|
|
174
203
|
`floor_seconds()` is `fixed + slowest single test` — the fastest any partition
|
|
175
204
|
of this suite could be, because one job has to run that test and pays the fixed
|
|
176
|
-
cost like every other. It is currently **
|
|
177
|
-
(7m56s before #236 published it instead of rebuilding it per job
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
205
|
+
cost like every other. It is currently **5m47s**, of which 33s is the image
|
|
206
|
+
(7m56s before #236 published it instead of rebuilding it per job, 6m32s before
|
|
207
|
+
#245 shrank it).
|
|
208
|
+
|
|
209
|
+
Thirteen slices sit at 6m26s, **1.12x** the floor. That is the point of choosing
|
|
210
|
+
N from the numbers rather than from taste: six balanced slices were 13m37s,
|
|
211
|
+
twelve reach the floor, and past twelve every extra job is pure cost. Note that
|
|
212
|
+
1.12x is now a partition problem rather than a count problem — thirteen slices
|
|
213
|
+
*can* reach 1.00x, and the current assignment does not, because `occupancy-grid`
|
|
214
|
+
holds two 150s tests. The fixed cost falling twice is what exposed it: the same
|
|
215
|
+
partition was 1.11x of a floor that was a minute and a half higher. The
|
|
182
216
|
contract test asserts distance to the floor rather than the spread between
|
|
183
217
|
slices — spread is compressed toward 1.0 by the fixed cost as N grows, so it
|
|
184
218
|
keeps reading fine while the gate stops improving.
|