plesty-bench 0.3.2__tar.gz → 0.4.0.dev1__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.
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/.gitlab-ci.yml +42 -8
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/CHANGELOG.md +315 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/PKG-INFO +27 -30
- plesty_bench-0.4.0.dev1/README.md +68 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/docs/api_reference.md +2 -2
- plesty_bench-0.4.0.dev1/docs/cli/files.md +152 -0
- plesty_bench-0.4.0.dev1/docs/cli/index.md +44 -0
- plesty_bench-0.4.0.dev1/docs/cli/plesty-bench.md +106 -0
- plesty_bench-0.4.0.dev1/docs/cli/plesty-server.md +176 -0
- plesty_bench-0.4.0.dev1/docs/cross_bench.md +198 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/docs/design/agent.md +24 -3
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/docs/design/architecture.md +19 -4
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/docs/design/console.md +49 -6
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/docs/design/cross_platform.md +6 -5
- plesty_bench-0.4.0.dev1/docs/design/experiments.md +128 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/docs/design/index.md +3 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/docs/design/installer.md +13 -6
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/docs/design/packaging.md +51 -18
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/docs/design/ports.md +1 -1
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/docs/design/processes.md +6 -3
- plesty_bench-0.4.0.dev1/docs/gui/devices.md +226 -0
- plesty_bench-0.4.0.dev1/docs/gui/experiments.md +180 -0
- plesty_bench-0.4.0.dev1/docs/gui/index.md +76 -0
- plesty_bench-0.4.0.dev1/docs/gui/menus.md +196 -0
- plesty_bench-0.4.0.dev1/docs/imgs/bench_overview.svg +73 -0
- plesty_bench-0.4.0.dev1/docs/imgs/cross_bench.svg +55 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-data-collapse.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-data-expand.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-device-clear_log.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-device-control.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-device-edit.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-device-field_test.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-device-install.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-device-remove.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-device-restart.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-device-start.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-device-stop.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-device-uninstall.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-device-update.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-exp-create.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-exp-duplicate.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-exp-load.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-experiment-abort.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-experiment-configure.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-experiment-install.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-experiment-open.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-experiment-pause.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-experiment-remove.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-experiment-run.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-experiment-stop.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-experiment-update.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-fleet-control.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-fleet-declare.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-fleet-down.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-fleet-refresh.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/btn-fleet-up.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/capture.py +842 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/capture_cross_bench.py +317 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/control-window.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/detail-card.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/detail-jobs.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/detail-log.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/detail-reports.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/detail-terminal.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/detail-traffic.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/devices-card.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/dialog-add-experiment.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/dialog-agent.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/dialog-configure-tab2.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/dialog-configure.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/dialog-create-run.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/dialog-declare.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/dialog-device-config-tab2.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/dialog-device-config.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/dialog-field-test.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/dialog-fleet-file.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/dialog-load-from.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/dialog-problem.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/run-data.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/run-log.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/run-report.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/run-visualization.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/runs-card.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/start-device.gif +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/status-line.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/take-control.gif +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/window-devices.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/window-experiments.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/xbench-completed.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/xbench-devices-before.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/xbench-devices-during.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/xbench-dialog-agent.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/xbench-dialog-benches.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/xbench-dialog-configure-tab2.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/xbench-dialog-create-run.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/xbench-report-fss.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/xbench-report-setup.png +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/xbench-report.gif +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/xbench-run.gif +0 -0
- plesty_bench-0.4.0.dev1/docs/imgs/gui/xbench-visualization.png +0 -0
- plesty_bench-0.4.0.dev1/docs/index.md +56 -0
- plesty_bench-0.4.0.dev1/docs/install.md +104 -0
- plesty_bench-0.4.0.dev1/docs/toc.yaml +45 -0
- plesty_bench-0.4.0.dev1/docs/usage/experiment.md +210 -0
- plesty_bench-0.4.0.dev1/docs/usage/field_test.md +84 -0
- plesty_bench-0.4.0.dev1/docs/usage/first_bench.md +115 -0
- plesty_bench-0.4.0.dev1/docs/usage/headless.md +52 -0
- plesty_bench-0.4.0.dev1/docs/usage/index.md +18 -0
- {plesty_bench-0.3.2/docs → plesty_bench-0.4.0.dev1/docs/usage}/maintenance.md +36 -13
- plesty_bench-0.4.0.dev1/docs/usage/modules.md +94 -0
- plesty_bench-0.4.0.dev1/docs/usage/remote.md +90 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/gl-secret-detection-report.json +6 -6
- plesty_bench-0.4.0.dev1/packaging/windows/install.ps1 +359 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/packaging/windows/plesty-server.iss +22 -7
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/packaging/windows/uninstall.ps1 +30 -10
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/bench/__init__.py +2 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/assets/console.qss +94 -5
- plesty_bench-0.4.0.dev1/plesty/server/assets/report.css +394 -0
- plesty_bench-0.4.0.dev1/plesty/server/assets/report.html +113 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/cli/main.py +144 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/model/__init__.py +38 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/model/agent.py +42 -2
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/model/catalogue.py +14 -2
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/model/device.py +36 -1
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/model/device_manager.py +36 -5
- plesty_bench-0.4.0.dev1/plesty/server/model/experiment.py +419 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/model/fleet.py +78 -7
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/model/home.py +20 -0
- plesty_bench-0.4.0.dev1/plesty/server/model/peer.py +187 -0
- plesty_bench-0.4.0.dev1/plesty/server/presenter/bench.py +3352 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/services/__init__.py +78 -0
- plesty_bench-0.4.0.dev1/plesty/server/services/experiments.py +645 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/services/installer.py +214 -5
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/services/jobs.py +23 -1
- plesty_bench-0.4.0.dev1/plesty/server/services/nodes.py +266 -0
- plesty_bench-0.4.0.dev1/plesty/server/services/problem_report.py +232 -0
- plesty_bench-0.4.0.dev1/plesty/server/services/run_report.py +789 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/view/control.py +39 -6
- plesty_bench-0.4.0.dev1/plesty/server/view/dialogs.py +3553 -0
- plesty_bench-0.4.0.dev1/plesty/server/view/window.py +3199 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/pyproject.toml +31 -10
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/reports/check.json +4 -4
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/test_bench.py +84 -1
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/test_cli.py +28 -1
- plesty_bench-0.4.0.dev1/tests/test_experiments.py +1269 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/test_installer.py +122 -1
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/test_jobs.py +30 -1
- plesty_bench-0.4.0.dev1/tests/test_nodes.py +396 -0
- plesty_bench-0.4.0.dev1/tests/test_problem_report.py +183 -0
- plesty_bench-0.4.0.dev1/tests/test_run_report.py +554 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/test_view.py +407 -24
- plesty_bench-0.4.0.dev1/tests/test_view_experiment.py +1674 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/uv.lock +26 -14
- plesty_bench-0.3.2/README.md +0 -71
- plesty_bench-0.3.2/docs/bench_setup.md +0 -154
- plesty_bench-0.3.2/docs/cli.md +0 -136
- plesty_bench-0.3.2/docs/console.md +0 -180
- plesty_bench-0.3.2/docs/field_test.md +0 -85
- plesty_bench-0.3.2/docs/index.md +0 -137
- plesty_bench-0.3.2/docs/modules.md +0 -118
- plesty_bench-0.3.2/docs/remote.md +0 -148
- plesty_bench-0.3.2/docs/running.md +0 -130
- plesty_bench-0.3.2/docs/toc.yaml +0 -29
- plesty_bench-0.3.2/packaging/windows/install.ps1 +0 -254
- plesty_bench-0.3.2/plesty/server/presenter/bench.py +0 -1636
- plesty_bench-0.3.2/plesty/server/view/dialogs.py +0 -1228
- plesty_bench-0.3.2/plesty/server/view/window.py +0 -1257
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/.gitignore +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/LICENSE +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/LICENSES/LGPL-3.0-or-later.txt +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/REUSE.toml +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/packaging/install.sh +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/packaging/plesty-mark.png +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/packaging/server_dist.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/packaging/windows/build-installer.ps1 +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/packaging/windows/probes/README.md +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/packaging/windows/probes/probe.iss +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/packaging/windows/probes/probe.ps1 +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/packaging/windows/probes/probe2.iss +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/packaging/windows/probes/probe2.ps1 +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/bench/cli.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/bench/client.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/__init__.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/__main__.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/assets/env.example +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/assets/fleet.example.yaml +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/assets/plesty-mark.svg +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/cli/__init__.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/config.yaml +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/host.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/model/envfile.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/model/errors.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/model/field_test.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/model/job.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/model/ports.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/model/process.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/model/purge.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/model/traffic.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/presenter/__init__.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/reexec.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/services/agent.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/services/catalogue.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/services/control.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/services/gitbin.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/services/launch.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/services/supervisor.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/view/__init__.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/view/app.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/plesty/server/view/workers.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/__init__.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/conftest.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/fake_server.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/test_agent.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/test_agent_settings.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/test_catalogue.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/test_control.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/test_device_manager.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/test_field_test.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/test_fleet.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/test_gitbin.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/test_home.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/test_host.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/test_job.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/test_packaging.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/test_purge.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/test_server.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/test_supervisor.py +0 -0
- {plesty_bench-0.3.2 → plesty_bench-0.4.0.dev1}/tests/test_traffic.py +0 -0
|
@@ -87,6 +87,14 @@ tests:windows:
|
|
|
87
87
|
rules:
|
|
88
88
|
- if: $CI_COMMIT_TAG
|
|
89
89
|
|
|
90
|
+
# The installers and the release page are for released versions only. A
|
|
91
|
+
# snapshot tag (v0.4.0.dev1) publishes both wheels to PyPI and stops there:
|
|
92
|
+
# an installer pins the version it installs, and a .dev one is not something a
|
|
93
|
+
# bench should be pinned to — the installer job refuses it outright.
|
|
94
|
+
.released-version-rules:
|
|
95
|
+
rules:
|
|
96
|
+
- if: $CI_COMMIT_TAG =~ /^v\d+\.\d+\.\d+$/
|
|
97
|
+
|
|
90
98
|
release:server-wheel:
|
|
91
99
|
stage: release
|
|
92
100
|
extends: .release-rules
|
|
@@ -139,10 +147,10 @@ release:server-wheel:
|
|
|
139
147
|
|
|
140
148
|
installer:windows:
|
|
141
149
|
stage: release
|
|
142
|
-
# on tags, and on demand from an installer/<name> branch to prove a change
|
|
150
|
+
# on release tags (not snapshots), and on demand from an installer/<name> branch to prove a change
|
|
143
151
|
# to the Inno Setup script before it is tagged
|
|
144
152
|
rules:
|
|
145
|
-
- if: $CI_COMMIT_TAG
|
|
153
|
+
- if: $CI_COMMIT_TAG =~ /^v\d+\.\d+\.\d+$/
|
|
146
154
|
- if: $CI_COMMIT_BRANCH =~ /^installer\//
|
|
147
155
|
tags:
|
|
148
156
|
- saas-windows-medium-amd64
|
|
@@ -191,7 +199,7 @@ installer:windows:
|
|
|
191
199
|
# distributions — the Releases page is the download list.
|
|
192
200
|
release:assets:
|
|
193
201
|
stage: release
|
|
194
|
-
extends: .
|
|
202
|
+
extends: .released-version-rules
|
|
195
203
|
image: registry.gitlab.com/gitlab-org/release-cli:latest
|
|
196
204
|
needs:
|
|
197
205
|
- job: installer:windows
|
|
@@ -214,14 +222,40 @@ release:assets:
|
|
|
214
222
|
grep -q "release_version=\"$version\"" install.sh || { echo "install.sh not stamped"; exit 1; }
|
|
215
223
|
curl --fail --silent --show-error --header "JOB-TOKEN: $CI_JOB_TOKEN" \
|
|
216
224
|
--upload-file install.sh "$REGISTRY/install.sh"
|
|
225
|
+
- |
|
|
226
|
+
# The release page says what this release changed. It used to carry one
|
|
227
|
+
# fixed sentence, identical on every tag, so the Releases list read as
|
|
228
|
+
# eight copies of the same paragraph and "See CHANGELOG.md" was the only
|
|
229
|
+
# thing that ever differed -- a pointer where the note should have been.
|
|
230
|
+
# The changelog entry for the tag is the note; a tag without one fails
|
|
231
|
+
# the job rather than publishing an empty release.
|
|
232
|
+
version="${CI_COMMIT_TAG#v}"
|
|
233
|
+
awk -v v="$version" '
|
|
234
|
+
$0 == "## [" v "]" || index($0, "## [" v "] ") == 1 { found = 1; next }
|
|
235
|
+
found && /^## \[/ { exit }
|
|
236
|
+
found { print }
|
|
237
|
+
' CHANGELOG.md > changes.md
|
|
238
|
+
grep -q '[^[:space:]]' changes.md || { echo "no CHANGELOG entry for $version"; exit 1; }
|
|
239
|
+
{
|
|
240
|
+
echo "**Install** — Windows: run the installer below; it installs uv and the"
|
|
241
|
+
echo "application from PyPI and adds a Start-menu entry and an optional desktop"
|
|
242
|
+
echo "shortcut. macOS and Linux: download \`install.sh\` and run it with \`sh\`."
|
|
243
|
+
echo "Developer machines: \`uv tool install plesty-bench\`."
|
|
244
|
+
echo
|
|
245
|
+
echo "**Update a bench** — \`uv tool upgrade plesty-server\` on macOS and Linux."
|
|
246
|
+
echo "On Windows use the *Update PLESTY Bench* Start-menu entry: since 0.3.3 the"
|
|
247
|
+
echo "application lives in its own environment there, not in uv's tool environment."
|
|
248
|
+
echo
|
|
249
|
+
echo "## What changed in $CI_COMMIT_TAG"
|
|
250
|
+
cat changes.md
|
|
251
|
+
} > release_notes.md
|
|
252
|
+
cat release_notes.md
|
|
217
253
|
release:
|
|
218
254
|
tag_name: $CI_COMMIT_TAG
|
|
219
255
|
name: "plesty-server $CI_COMMIT_TAG"
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
install.sh and run it with sh. Developer machines: uv tool install plesty-bench.
|
|
224
|
-
Update a bench with uv tool upgrade plesty-server. See CHANGELOG.md.
|
|
256
|
+
# A path, not prose: release-cli reads the file the script above wrote, so
|
|
257
|
+
# the note is this release's changelog entry rather than a constant.
|
|
258
|
+
description: release_notes.md
|
|
225
259
|
assets:
|
|
226
260
|
links:
|
|
227
261
|
- name: "plesty-server-$CI_COMMIT_TAG-windows-setup.exe (Windows installer)"
|
|
@@ -2,6 +2,321 @@
|
|
|
2
2
|
|
|
3
3
|
The format is based on [Keep a Changelog](https://keepachangelog.com).
|
|
4
4
|
|
|
5
|
+
## [Unreleased]
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
- **A run keeps its own report.** When a run ends — completed, stopped,
|
|
9
|
+
aborted or crashed — the job writes `report.html` into the run directory,
|
|
10
|
+
beside the data it reports on. A run directory handed to somebody months
|
|
11
|
+
later now reads itself without the console that made it; *Export HTML* is
|
|
12
|
+
still there and still writes a copy wherever you point it. A report that
|
|
13
|
+
cannot be compiled is a line in the job log, never a failed run.
|
|
14
|
+
- **Open run** opens the selected run's directory — records, journal,
|
|
15
|
+
analyses and report. Offered while the run is going, which is when watching
|
|
16
|
+
the files appear is most useful, and on a run loaded from elsewhere.
|
|
17
|
+
- **The views come out of the pane.** *Console ▸ Open these views in a window*,
|
|
18
|
+
on the views' own menu bar, floats the whole viewer — every panel, its menus
|
|
19
|
+
and its layout — into a window of its own, which is what a plot read closely
|
|
20
|
+
wants. *Dock them back here*, or the button the pane then shows, returns it.
|
|
21
|
+
It is the only way to take the views out as a whole: the viewer's own
|
|
22
|
+
*Panels* menu hides and shows them, and dragging one out by its title bar
|
|
23
|
+
floats that one.
|
|
24
|
+
- **Starting a run says what it is waiting on.** Every device the setup names
|
|
25
|
+
is opened on its bench before the module is launched — seconds of hardware
|
|
26
|
+
per instrument, during which the console showed nothing and a working Run
|
|
27
|
+
read as a broken one. A dialog now names the device being opened. It is
|
|
28
|
+
closable and closing it stops nothing: the run starts either way, and
|
|
29
|
+
Devices has the detail.
|
|
30
|
+
- **Configure… changes the selected run, and nothing else.** Create run copies
|
|
31
|
+
the chosen configuration file into the run directory as `config.yaml`, and
|
|
32
|
+
the run is started and resumed with that copy. With a created run selected,
|
|
33
|
+
Configure edits the copy — choosing another file gives the run that file —
|
|
34
|
+
and leaves the module's files and the other runs as they are; a started run
|
|
35
|
+
shows its configuration read-only. Duplicate repeats the run's own copy.
|
|
36
|
+
Before, Configure changed the experiment, so a run created a moment earlier
|
|
37
|
+
was still started with the file it was created with.
|
|
38
|
+
- **The measurement report has a Device setup section**: each device's bench,
|
|
39
|
+
the address the run reached it on and where that bench sees the shared data
|
|
40
|
+
disk, with the run's shared point and raw data folder — as plesty-lib
|
|
41
|
+
journals them when a run starts. A resumed run lists each start, since the
|
|
42
|
+
ports change between starts; a run from an older plesty-lib says it did not
|
|
43
|
+
record them.
|
|
44
|
+
- **The measurement report switches between light and dark** — Auto, the
|
|
45
|
+
reader's system setting, or Light or Dark from the switch in its header.
|
|
46
|
+
The switch is radio buttons read by the stylesheet, so the report still
|
|
47
|
+
runs no script.
|
|
48
|
+
- **An experiment runs with its module's `setup.yaml`** — plesty-lib's
|
|
49
|
+
contract (`plesty.lib.experiment.setup`). Every experiment module ships one
|
|
50
|
+
at its root: a fleet file's `devices:` with bench entries beside them as
|
|
51
|
+
`benches:` — where each bench's agent listens, its token, and where it sees
|
|
52
|
+
the lab's shared data disk, each written as the variable holding it
|
|
53
|
+
(`${SPEC_PC_HOST}`); the values live in the checkout's `.env`. Installing
|
|
54
|
+
the module seeds that `.env` with a line per variable. The bench without an
|
|
55
|
+
address is the machine the experiment runs on; a device names its bench,
|
|
56
|
+
and no port. **Run** checks that every bench sees the one shared disk — a
|
|
57
|
+
probe written here, read and answered through each other bench's agent
|
|
58
|
+
(`plesty-server share-check`) — then has each device served by its bench
|
|
59
|
+
(`plesty-server serve`): declared from its entry when that bench lacks it,
|
|
60
|
+
started on a port the bench picks, with `DEVICE_DATA_PATH`, its bench's
|
|
61
|
+
view of the disk, under which it may write anywhere. The run is given
|
|
62
|
+
`PLESTY_DATA` and each `<DEVICE>_ADDRESS` from the port its bench said;
|
|
63
|
+
this replaces working out a run's devices from the fleet's ports. The
|
|
64
|
+
devices a run started are stopped when it ends, however it ends — the run's
|
|
65
|
+
job waits on the module and stops them (`_job experiment-run`), and Kill
|
|
66
|
+
stops them itself. Runs go
|
|
67
|
+
to the root the module declares, on the shared disk (`pol-pl` →
|
|
68
|
+
`<PLESTY_DATA>/pol-pl`), so a device on any bench can write into a run;
|
|
69
|
+
without a shared point they stay under this bench's home. A value set by hand in
|
|
70
|
+
the `.env` or the declaration still wins, and a value still missing is
|
|
71
|
+
named with its variable when a run cannot start. *Configure… ▸ Device
|
|
72
|
+
Setup* replaces the Environment tab and edits it — the benches by value,
|
|
73
|
+
this machine's first, saved as variables in the setup and values in the
|
|
74
|
+
`.env`, then a group per device. *Server ▸ Benches…* stays the list of
|
|
75
|
+
benches this console drives. A fleet file may carry `benches:`, so `fleet
|
|
76
|
+
up -f setup.yaml` works. Needs the plesty-lib that ships the contract.
|
|
77
|
+
- **Hub ▸ Load from… puts a repository on this machine onto the bench, where
|
|
78
|
+
it lives.** Pick a module's folder and a branch: the bench reads what the
|
|
79
|
+
module is from its `pyproject.toml` (`[tool.plesty] module_type`), checks out
|
|
80
|
+
the branch — refused over uncommitted changes — and records the folder, its
|
|
81
|
+
version and commit under `<home>/packages/<package>/`, running it with the
|
|
82
|
+
folder's own `.venv` (made with `uv sync` only when there is none). Nothing
|
|
83
|
+
is copied; removing it forgets the record and never deletes the folder. A
|
|
84
|
+
loaded module serves only a declaration that names its folder (`path:`), so
|
|
85
|
+
loading one never changes what an existing declaration runs. *Create run*
|
|
86
|
+
offers a loaded experiment as `pol-pl (local)`. Also `plesty-server module
|
|
87
|
+
load FOLDER [--ref BRANCH]`.
|
|
88
|
+
- **An experiment's configuration is laid out, not listed.** *Configure…*'s
|
|
89
|
+
first tab is **Experiment Config**: each group a titled box, a list of
|
|
90
|
+
records as rows with + and − at the end of each, grey text in an empty field
|
|
91
|
+
taken with Tab, and a picker over the module's `config/*.yaml` — each file
|
|
92
|
+
keeps its edits, and the one chosen when saving is the one runs read. The
|
|
93
|
+
YAML tab became **Edit YAML…**, which opens the file with the form's edits in
|
|
94
|
+
it; a file nobody changed is written back as it was, comments and all. The
|
|
95
|
+
dialog can be made as narrow as a key and a field allow. A double-click on an
|
|
96
|
+
experiment opens *Configure…*, on a device *Edit ▸ Device config…*; *Hub ▸
|
|
97
|
+
Search & install…* is now **Hub ▸ Marketplace…**.
|
|
98
|
+
- **The run report shows what each analyzer says it found** (plesty-lib#55).
|
|
99
|
+
An analyzer's own report, saved beside its outputs as
|
|
100
|
+
`analysis/<name>.report.json`, becomes the analysis section: its sentence, its
|
|
101
|
+
tables — units, grouped headings, footnotes, math — and its figures, rendered
|
|
102
|
+
by plesty-lib as inline SVG and MathML, so the file still fetches and runs
|
|
103
|
+
nothing. The outputs a report covers (same provenance) are no longer guessed
|
|
104
|
+
at from their array names as well. A console whose plesty-lib predates
|
|
105
|
+
reports, or refuses one from a newer version, reads the outputs as before.
|
|
106
|
+
- **A finished run compiles into one HTML report** (#13). *Export HTML* on the
|
|
107
|
+
Report pane lays out what a measurement is worth to somebody who was not
|
|
108
|
+
standing there: what was run and how it ended, the module and instruments it
|
|
109
|
+
recorded, the configuration frozen into its plan, the operator's notes, what
|
|
110
|
+
each analyzer made of the sweep with the options it was given, and every
|
|
111
|
+
committed record.
|
|
112
|
+
|
|
113
|
+
One file — the stylesheet is inlined, there is no script and nothing is
|
|
114
|
+
fetched, because a report has to open from an attachment and in ten years.
|
|
115
|
+
The markup is an asset and the colours are plesty-lib's palette tokens, so
|
|
116
|
+
nothing about how it looks is decided in Python.
|
|
117
|
+
|
|
118
|
+
The run is read directly rather than through plesty-lib's document readers:
|
|
119
|
+
an experiment runs in an environment of its own, so the library that wrote a
|
|
120
|
+
run is routinely newer than the console's, and a bench on 0.4.1 would
|
|
121
|
+
otherwise refuse to report a run it can plainly see.
|
|
122
|
+
|
|
123
|
+
- **Help ▸ Report a problem fills the report in and filters it** (#14). The
|
|
124
|
+
first question a maintainer asks is what were you running and on what, so the
|
|
125
|
+
entry answers it: the machine, the interpreter, the Plesty versions, every
|
|
126
|
+
declared device with its package, version, state and port, and the tail of
|
|
127
|
+
each device log. What is sent is shown in full and stays editable — a review
|
|
128
|
+
is only real if what is on screen is what goes.
|
|
129
|
+
|
|
130
|
+
The bench files nothing itself. It holds no credential that could write to
|
|
131
|
+
the tracker, and giving it one would put a token on every lab machine for a
|
|
132
|
+
convenience; *Copy & open tracker* puts the report on the clipboard and opens
|
|
133
|
+
the project's new-issue page with the title filled in, and the operator
|
|
134
|
+
submits as themselves. Nothing that looks like a credential leaves the bench:
|
|
135
|
+
a device environment is reported by key and never by value, and every
|
|
136
|
+
captured line — the operator's own words included — loses assignments named
|
|
137
|
+
like secrets, credentials inside URLs, tokens that announce themselves by
|
|
138
|
+
prefix, and Authorization headers. Matched on names rather than shapes, so a
|
|
139
|
+
commit hash stays a commit hash.
|
|
140
|
+
|
|
141
|
+
- **Experiments are set up, run and watched from the console.** `fleet.yaml`
|
|
142
|
+
grows an `experiments:` section beside `devices:`, and the Experiment tab is
|
|
143
|
+
the Devices half's shape: what this bench holds above, the detail of the
|
|
144
|
+
selected one below, with Status, Runs, Log, Data and Visualization panes.
|
|
145
|
+
|
|
146
|
+
**The settings form is the module's, not ours.** An experiment publishes
|
|
147
|
+
what it takes — `python -m <module> --manifest` prints every configuration
|
|
148
|
+
key with its type, unit, bounds and meaning — and *Configure…* renders that
|
|
149
|
+
with the same schema-to-widget mapping a device panel uses. The console
|
|
150
|
+
holds no per-experiment code and cannot offer a setting the module does not
|
|
151
|
+
take, or bound one differently from the way the module bounds it. A key
|
|
152
|
+
whose value is a document is offered as text; the YAML tab is the file
|
|
153
|
+
itself and is what is saved, so a key the schema does not declare — and the
|
|
154
|
+
comments explaining one — survive an edit made in the form. The Environment
|
|
155
|
+
tab names what the module reads and what of it is not set.
|
|
156
|
+
|
|
157
|
+
**A run is a detached job**, so closing the console does not stop the
|
|
158
|
+
measurement, and *Run* becomes *Resume* on a run that stopped unfinished.
|
|
159
|
+
*Pause* holds it before the next step with the rig still connected — the
|
|
160
|
+
difference from stopping and resuming, which pays a reconnect, a preflight
|
|
161
|
+
and possibly a re-home to come back. *Stop* lets the step in flight commit
|
|
162
|
+
first; *Abort* does not wait, releasing the instruments at once and leaving
|
|
163
|
+
that step to run again. All three take effect at a step boundary, where the
|
|
164
|
+
journal commits; a request made during a long exposure is pending, not
|
|
165
|
+
ignored, and the Status pane says so. *Report…* records what happened —
|
|
166
|
+
a helium top-up, a realignment — in the journal between the steps it sits
|
|
167
|
+
between.
|
|
168
|
+
|
|
169
|
+
**Status is read, never asked.** The journal, the plan and the progress file
|
|
170
|
+
are this bench's own files: a refresh costs a directory read and cannot
|
|
171
|
+
disturb a run. The journal is replayed here rather than through plesty-lib,
|
|
172
|
+
because the run was written by a module whose library version has nothing to
|
|
173
|
+
do with this console's — delegating would make the same run read differently
|
|
174
|
+
on two benches.
|
|
175
|
+
|
|
176
|
+
Visualization is a placeholder that says why: an experiment's views need its
|
|
177
|
+
own dependencies, so *Watch run* opens the module's viewer as a process of
|
|
178
|
+
its own.
|
|
179
|
+
|
|
180
|
+
An experiment is installed from its repository rather than from a release —
|
|
181
|
+
its `config/` and `.env.example` are in the checkout, not in the wheel.
|
|
182
|
+
Needs a module whose command line is built on
|
|
183
|
+
`plesty.lib.experiment.ExperimentCLI` (plesty-lib#54).
|
|
184
|
+
|
|
185
|
+
- **One console for several benches.** A bench declares `role: master` or
|
|
186
|
+
`role: node` under *Server ▸ Configure…*. A master lists the other benches
|
|
187
|
+
under *Server ▸ Benches…* — name, address and agent token, kept in
|
|
188
|
+
`<home>/peers.yaml` — and shows their devices in the device table beside its
|
|
189
|
+
own, under a new **Host** column. It starts, stops, restarts, installs and
|
|
190
|
+
updates them, and opens their control panels, all over the agent's existing
|
|
191
|
+
`exec` and `device` requests; an install on another bench is started there
|
|
192
|
+
and its job id reported, since this console keeps no job list for a device it
|
|
193
|
+
does not host. One master to a group of benches and no chaining. It is how a
|
|
194
|
+
console is configured and not a permission: the agent checks one shared
|
|
195
|
+
secret and knows no caller identity, so a bench's token drives that bench
|
|
196
|
+
whoever holds it.
|
|
197
|
+
|
|
198
|
+
A device on another bench has no *Log*, *Jobs*, *Reports*, *Terminal* or
|
|
199
|
+
*Traffic*: all five read files in the bench that hosts it, and reading a log
|
|
200
|
+
tail off another machine every three seconds is the cost this avoids. Those
|
|
201
|
+
tabs are disabled, and the pane says which bench to read them on. Editing the
|
|
202
|
+
declaration, clearing the log, uninstalling, removing from the fleet and the
|
|
203
|
+
field test stay with the host bench too.
|
|
204
|
+
|
|
205
|
+
- **The Hub offers experiments as well as devices.** *Catalogue* is now
|
|
206
|
+
**Hub**, and *Search & install…* lists the registry's experiment modules
|
|
207
|
+
beside its device modules, with a kind filter and a Kind column. The install
|
|
208
|
+
path is unchanged — it was always keyed by the package rather than by a
|
|
209
|
+
device. Only modules at the quantum standard are offered, as before;
|
|
210
|
+
analyzers are not listed, an analyzer being a library an experiment brings
|
|
211
|
+
with it.
|
|
212
|
+
|
|
213
|
+
- **Control is a button, and each kind opens what it says.** *Control* on the
|
|
214
|
+
detail card opens the selected device's controls in a window of its own,
|
|
215
|
+
named for it; *Control* on the device table opens the wall — one window with
|
|
216
|
+
the controls of every running device. They were one window before, which
|
|
217
|
+
meant asking for one device's controls showed the last device's docked beside
|
|
218
|
+
them.
|
|
219
|
+
|
|
220
|
+
- **Fleet up and Fleet down reach the nodes.** A master brings a rig up, and
|
|
221
|
+
the rig is every bench the table shows; each node is asked for its own
|
|
222
|
+
working fleet, which is that bench's declaration. A node that refuses costs a
|
|
223
|
+
line in the status bar and not the rest of the rig.
|
|
224
|
+
|
|
225
|
+
- **plesty-lib 0.4.1 is the floor.** A panel on 0.4.0 cannot read or write a
|
|
226
|
+
grouped configuration parameter at all — it addresses one by its bare name,
|
|
227
|
+
which the device refuses — and sends an optional numeric argument as the text
|
|
228
|
+
typed into it. Both are fixed in 0.4.1, along with the panel's layout,
|
|
229
|
+
reading on request rather than on a clock, and units with real exponents.
|
|
230
|
+
|
|
231
|
+
### Changed
|
|
232
|
+
- **The Report pane says something about the report.** It names the run's own
|
|
233
|
+
`report.html` — when it was written and how big — or says when it will have
|
|
234
|
+
one. The operator's notes, which the pane also called "reports", are now
|
|
235
|
+
under **Notes**: two different things under one heading was what made the
|
|
236
|
+
pane hard to read.
|
|
237
|
+
- **Requires plesty-lib 0.5.0.dev6** (was 0.5.0.dev5), which retires
|
|
238
|
+
`PLESTY_DATA_DIR` and `PLESTY_DATA_MOUNT` for the one shared root
|
|
239
|
+
`PLESTY_DATA` and makes a manifest's `run_root` relative to the shared point.
|
|
240
|
+
A run's environment is built from that contract, so a console on dev5 and a
|
|
241
|
+
module on dev6 do not agree on where a run writes. Still a prerelease until
|
|
242
|
+
the bound moves to 0.5.0, but the Windows installer needs no flag for it: it
|
|
243
|
+
installs with pip, which takes a prerelease a requirement names.
|
|
244
|
+
- **The tables refresh every second**, not every three: the Progress column
|
|
245
|
+
follows a run step by step instead of jumping several at a time.
|
|
246
|
+
- **The report's raw data is one table per kind of step**, one short line per
|
|
247
|
+
record: a field the same in every row is said once above the table, a file
|
|
248
|
+
shows by its name with its folder said once, and a timestamp by its time of
|
|
249
|
+
day with its date said once. A step recorded once, such as the rig's
|
|
250
|
+
identity, is a list of its fields.
|
|
251
|
+
- **The window has two halves, Devices and Experiment**, and the menu bar reads
|
|
252
|
+
File, Edit, Device, Experiment, Hub, Server, View, Help. The Experiment tab is
|
|
253
|
+
empty and every item of the Experiment menu is disabled in this version: they
|
|
254
|
+
are built now so that the window does not change shape when the work behind
|
|
255
|
+
them lands.
|
|
256
|
+
- **The documentation is rewritten for the people who use a bench.** It is in
|
|
257
|
+
three parts — *GUI*, the window element by element with its real buttons,
|
|
258
|
+
dialogs and screenshots; *CLI*, every command, file and setting; *Usages*,
|
|
259
|
+
tasks step by step — after *Install* and a walkthrough of a pol-pl run
|
|
260
|
+
across two benches, filmed from a real run. Every page was checked against
|
|
261
|
+
the code; `docs/imgs/gui/capture.py` and `capture_cross_bench.py` make the
|
|
262
|
+
images again.
|
|
263
|
+
|
|
264
|
+
## [0.3.3] - 2026-09-09
|
|
265
|
+
|
|
266
|
+
### Changed
|
|
267
|
+
- **The release page says what the release changed.** Every release carried the
|
|
268
|
+
same fixed paragraph, so the Releases list read as eight copies of one
|
|
269
|
+
sentence and `See CHANGELOG.md` was the only part that could be right. The
|
|
270
|
+
note is now the changelog entry for the tag, and a tag without one fails the
|
|
271
|
+
job rather than publishing an empty release. The install lines above it were
|
|
272
|
+
wrong for Windows from this release on: a bench there updates from the
|
|
273
|
+
*Update PLESTY Bench* entry, not `uv tool upgrade`.
|
|
274
|
+
|
|
275
|
+
### Fixed
|
|
276
|
+
- **Renaming a device keeps the highlight on it.** The console refreshes every
|
|
277
|
+
three seconds into a four-task pool, so a refresh that started before a
|
|
278
|
+
rename lands after it, carrying the device under its old name. That repaint
|
|
279
|
+
took the pending selection, found no row to move to, selected nothing and
|
|
280
|
+
cleared it; the repaint that did carry the new row then fell back to the
|
|
281
|
+
current selection, which was the old name. The rename worked and the
|
|
282
|
+
highlight jumped back to a device that no longer existed. The pending
|
|
283
|
+
selection is now held until a repaint can honour it. Found as a Windows CI
|
|
284
|
+
failure that passed on a second run of the same commit — the race is wider
|
|
285
|
+
on a loaded machine, not absent on a fast one.
|
|
286
|
+
- **The Windows installer installs with pip instead of `uv tool install`.**
|
|
287
|
+
Roughly one install in five failed on a bench with an on-access virus
|
|
288
|
+
scanner: `Failed to update Windows PE resources ... os error -2147024786`,
|
|
289
|
+
always naming the `pyside6-essentials` wheel. uv writes each console-script
|
|
290
|
+
launcher to a temp file and reopens it to patch its PE resources, and the
|
|
291
|
+
scanner blocks the reopen. `plesty-server[gui]` builds about 25 launchers,
|
|
292
|
+
23 of them PySide6 tools nothing here calls, so a per-file failure rate near
|
|
293
|
+
1% became a per-install failure rate near 20%. uv 0.12 has no way to skip
|
|
294
|
+
launchers it does not need.
|
|
295
|
+
|
|
296
|
+
The wizard now takes a Python from uv, builds a virtual environment under
|
|
297
|
+
`%LOCALAPPDATA%\PLESTY Bench\app`, and `pip install`s into it; pip writes a
|
|
298
|
+
launcher as one write of stub + shebang + zip payload to its final path and
|
|
299
|
+
reopens nothing. `plesty-server` and `plesty-server-gui` are copied to
|
|
300
|
+
`~\.local\bin` as before, so the shortcuts, PATH and `purge` are unchanged.
|
|
301
|
+
The install is slower.
|
|
302
|
+
|
|
303
|
+
Windows consequences, both carried by the wizard: an upgrade is the *Update
|
|
304
|
+
PLESTY Bench* entry (`python -m pip install --upgrade "plesty-server[gui]"`
|
|
305
|
+
in that environment) and not `uv tool upgrade`, and the uninstaller removes
|
|
306
|
+
the environment itself — it still takes off a pre-0.3.3 install from uv's
|
|
307
|
+
tool environment when it finds one. macOS and Linux are untouched and still
|
|
308
|
+
use `uv tool install`.
|
|
309
|
+
- **The install retries are spread out instead of fired back to back.** Three
|
|
310
|
+
immediate retries all land inside the same burst of scanner activity, which
|
|
311
|
+
makes them one attempt rather than three. The whole install is now retried
|
|
312
|
+
after roughly 2, 8 and 30 seconds with jitter, and only for causes that can
|
|
313
|
+
clear — a version that is not on the index still fails at once.
|
|
314
|
+
- **The uv interpreter search sorts by version again.** The version was
|
|
315
|
+
captured by the filter and read by the sort, but `Sort-Object` reads every
|
|
316
|
+
candidate before comparing any, so every one of them sorted on the last
|
|
317
|
+
directory's number. It also prefers the 3.12 series now: a bench carrying a
|
|
318
|
+
Python newer than PySide6 publishes wheels for would resolve to nothing.
|
|
319
|
+
|
|
5
320
|
## [0.3.2] - 2026-09-07
|
|
6
321
|
|
|
7
322
|
### Changed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: plesty-bench
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.0.dev1
|
|
4
4
|
Summary: Client for a PLESTY bench running plesty-server: run its commands and fetch its reports from another machine.
|
|
5
5
|
Author-email: Yunshuang Yuan <yuanyunshuang@gmail.com>
|
|
6
6
|
Maintainer-email: Plesty Development Team <plesty.dev@example.com>
|
|
@@ -11,36 +11,38 @@ Requires-Python: >=3.12
|
|
|
11
11
|
Requires-Dist: click>=8.1
|
|
12
12
|
Requires-Dist: pyzmq>=26
|
|
13
13
|
Provides-Extra: control
|
|
14
|
-
Requires-Dist: plesty-lib[gui]>=0.
|
|
14
|
+
Requires-Dist: plesty-lib[gui]>=0.5.0.dev8; extra == 'control'
|
|
15
15
|
Provides-Extra: gui
|
|
16
|
-
Requires-Dist: plesty-lib>=0.
|
|
17
|
-
Requires-Dist: plesty-lib[
|
|
16
|
+
Requires-Dist: plesty-lib[gui]>=0.5.0.dev8; extra == 'gui'
|
|
17
|
+
Requires-Dist: plesty-lib[report]>=0.5.0.dev8; extra == 'gui'
|
|
18
18
|
Requires-Dist: pyside6==6.11.2; extra == 'gui'
|
|
19
19
|
Requires-Dist: pyyaml>=6.0; extra == 'gui'
|
|
20
20
|
Provides-Extra: server
|
|
21
|
-
Requires-Dist: plesty-lib>=0.
|
|
21
|
+
Requires-Dist: plesty-lib[report]>=0.5.0.dev8; extra == 'server'
|
|
22
22
|
Requires-Dist: pyyaml>=6.0; extra == 'server'
|
|
23
23
|
Description-Content-Type: text/markdown
|
|
24
24
|
|
|
25
25
|
# plesty-server · plesty-bench
|
|
26
26
|
|
|
27
|
-
**The bench PC's own console for the PLESTY platform.** It installs hub
|
|
28
|
-
modules, starts and supervises
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
`uv` pin
|
|
27
|
+
**The bench PC's own console for the PLESTY platform.** It installs hub
|
|
28
|
+
modules, starts and supervises device servers, runs field tests against the
|
|
29
|
+
real instruments, and runs experiments across the lab's benches — keeping the
|
|
30
|
+
logs, the runs and their reports — so a lab bench is set up and kept running
|
|
31
|
+
from one place instead of one venv, one terminal and one hand-written `uv` pin
|
|
32
|
+
per instrument.
|
|
32
33
|
|
|
33
34
|
This repository publishes two packages:
|
|
34
35
|
|
|
35
36
|
| | Install on | Install with |
|
|
36
37
|
|---|---|---|
|
|
37
|
-
| **`plesty-server`** — the bench application: CLI, Qt console, agent | the bench PC |
|
|
38
|
+
| **`plesty-server`** — the bench application: CLI, Qt console, agent | the bench PC | the installer from the [releases](https://gitlab.com/plesty/core/plesty-bench/-/releases) |
|
|
38
39
|
| **`plesty-bench`** — the client that drives a bench from elsewhere | your own machine | `uv tool install plesty-bench` |
|
|
39
40
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
entry
|
|
41
|
+
Each release carries a Windows `setup.exe` (per-user, no admin) and an
|
|
42
|
+
`install.sh` for macOS and Linux. Both install the whole application,
|
|
43
|
+
console included, pinned to that release, and add a Start-menu or Launchpad
|
|
44
|
+
entry. Without an installer, `uv tool install "plesty-server[gui]"` installs
|
|
45
|
+
the same thing on macOS or Linux.
|
|
44
46
|
|
|
45
47
|
## Bringing up a bench
|
|
46
48
|
|
|
@@ -70,25 +72,20 @@ plesty-bench -b lab-bench-03 control pm100d # a control panel per devic
|
|
|
70
72
|
## Documentation
|
|
71
73
|
|
|
72
74
|
**[Full documentation](https://gitlab.com/plesty/core/plesty-bench/-/blob/main/docs/index.md)**
|
|
73
|
-
— start there if anything below is unfamiliar. It is in
|
|
75
|
+
— start there if anything below is unfamiliar. It is in three parts:
|
|
74
76
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
| | |
|
|
77
|
+
| Part | Covers |
|
|
78
78
|
|---|---|
|
|
79
|
-
| [
|
|
80
|
-
| [
|
|
81
|
-
| [
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
| [Working remotely](https://gitlab.com/plesty/core/plesty-bench/-/blob/main/docs/remote.md) | The agent and the `plesty-bench` client |
|
|
85
|
-
| [Maintenance](https://gitlab.com/plesty/core/plesty-bench/-/blob/main/docs/maintenance.md) | Upgrading, clearing logs, purging, uninstalling |
|
|
86
|
-
| [Command reference](https://gitlab.com/plesty/core/plesty-bench/-/blob/main/docs/cli.md) | Every `plesty-server` command |
|
|
79
|
+
| [GUI](https://gitlab.com/plesty/core/plesty-bench/-/blob/main/docs/gui/index.md) | The window element by element: the Devices and Experiments tabs, every menu, every dialog, the Control window |
|
|
80
|
+
| [CLI](https://gitlab.com/plesty/core/plesty-bench/-/blob/main/docs/cli/index.md) | `plesty-server`, `plesty-bench`, and every file and setting |
|
|
81
|
+
| [Usages](https://gitlab.com/plesty/core/plesty-bench/-/blob/main/docs/usage/index.md) | Tasks start to finish: set up a bench, install modules, field-test, run an experiment, work remotely, run without a window, maintain |
|
|
82
|
+
|
|
83
|
+
A new bench starts at [Set up a bench](https://gitlab.com/plesty/core/plesty-bench/-/blob/main/docs/usage/first_bench.md).
|
|
87
84
|
|
|
88
85
|
*[Design and internals](https://gitlab.com/plesty/core/plesty-bench/-/blob/main/docs/design/index.md)*
|
|
89
|
-
|
|
90
|
-
installer, the agent protocol, the platform differences and
|
|
91
|
-
machinery — for contributors, and for anyone debugging behaviour that only
|
|
86
|
+
covers the architecture, the process model, the port rules, the
|
|
87
|
+
installer, the agent protocol, experiment runs, the platform differences and
|
|
88
|
+
the release machinery — for contributors, and for anyone debugging behaviour that only
|
|
92
89
|
makes sense once the mechanism is visible.
|
|
93
90
|
|
|
94
91
|
New to the platform? The [PLESTY quickstart](https://plesty.net/learn/quickstart/index.html)
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# plesty-server · plesty-bench
|
|
2
|
+
|
|
3
|
+
**The bench PC's own console for the PLESTY platform.** It installs hub
|
|
4
|
+
modules, starts and supervises device servers, runs field tests against the
|
|
5
|
+
real instruments, and runs experiments across the lab's benches — keeping the
|
|
6
|
+
logs, the runs and their reports — so a lab bench is set up and kept running
|
|
7
|
+
from one place instead of one venv, one terminal and one hand-written `uv` pin
|
|
8
|
+
per instrument.
|
|
9
|
+
|
|
10
|
+
This repository publishes two packages:
|
|
11
|
+
|
|
12
|
+
| | Install on | Install with |
|
|
13
|
+
|---|---|---|
|
|
14
|
+
| **`plesty-server`** — the bench application: CLI, Qt console, agent | the bench PC | the installer from the [releases](https://gitlab.com/plesty/core/plesty-bench/-/releases) |
|
|
15
|
+
| **`plesty-bench`** — the client that drives a bench from elsewhere | your own machine | `uv tool install plesty-bench` |
|
|
16
|
+
|
|
17
|
+
Each release carries a Windows `setup.exe` (per-user, no admin) and an
|
|
18
|
+
`install.sh` for macOS and Linux. Both install the whole application,
|
|
19
|
+
console included, pinned to that release, and add a Start-menu or Launchpad
|
|
20
|
+
entry. Without an installer, `uv tool install "plesty-server[gui]"` installs
|
|
21
|
+
the same thing on macOS or Linux.
|
|
22
|
+
|
|
23
|
+
## Bringing up a bench
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
plesty-server fleet init # a fleet.yaml to declare into
|
|
27
|
+
plesty-server declare pm100d plesty-pm100d --version 0.2.1 \
|
|
28
|
+
--arg --address --arg "USB0::0x1313::…::INSTR"
|
|
29
|
+
plesty-server start pm100d # installs, launches, waits until it answers
|
|
30
|
+
plesty-server status
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
The instrument is now reachable from an experiment PC at this machine's
|
|
34
|
+
address on the port `status` reports. `plesty-server gui` opens the same bench
|
|
35
|
+
in a window; `plesty-server fleet run` keeps it up headless after a reboot.
|
|
36
|
+
|
|
37
|
+
## Driving it from your own machine
|
|
38
|
+
|
|
39
|
+
The bench serves an agent; the client sends it `plesty-server` command lines
|
|
40
|
+
and follows the output.
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
plesty-bench -b lab-bench-03 status
|
|
44
|
+
plesty-bench -b lab-bench-03 field-test pm100d --gates connect,drain
|
|
45
|
+
plesty-bench -b lab-bench-03 control pm100d # a control panel per device
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Documentation
|
|
49
|
+
|
|
50
|
+
**[Full documentation](https://gitlab.com/plesty/core/plesty-bench/-/blob/main/docs/index.md)**
|
|
51
|
+
— start there if anything below is unfamiliar. It is in three parts:
|
|
52
|
+
|
|
53
|
+
| Part | Covers |
|
|
54
|
+
|---|---|
|
|
55
|
+
| [GUI](https://gitlab.com/plesty/core/plesty-bench/-/blob/main/docs/gui/index.md) | The window element by element: the Devices and Experiments tabs, every menu, every dialog, the Control window |
|
|
56
|
+
| [CLI](https://gitlab.com/plesty/core/plesty-bench/-/blob/main/docs/cli/index.md) | `plesty-server`, `plesty-bench`, and every file and setting |
|
|
57
|
+
| [Usages](https://gitlab.com/plesty/core/plesty-bench/-/blob/main/docs/usage/index.md) | Tasks start to finish: set up a bench, install modules, field-test, run an experiment, work remotely, run without a window, maintain |
|
|
58
|
+
|
|
59
|
+
A new bench starts at [Set up a bench](https://gitlab.com/plesty/core/plesty-bench/-/blob/main/docs/usage/first_bench.md).
|
|
60
|
+
|
|
61
|
+
*[Design and internals](https://gitlab.com/plesty/core/plesty-bench/-/blob/main/docs/design/index.md)*
|
|
62
|
+
covers the architecture, the process model, the port rules, the
|
|
63
|
+
installer, the agent protocol, experiment runs, the platform differences and
|
|
64
|
+
the release machinery — for contributors, and for anyone debugging behaviour that only
|
|
65
|
+
makes sense once the mechanism is visible.
|
|
66
|
+
|
|
67
|
+
New to the platform? The [PLESTY quickstart](https://plesty.net/learn/quickstart/index.html)
|
|
68
|
+
runs a whole experiment against a bench and is the gentlest way in.
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
Entry pages: the [bench application `plesty.server`](reference/plesty/server/index)
|
|
4
4
|
and the [client `plesty.bench`](reference/plesty/bench/index).
|
|
5
5
|
|
|
6
|
-
Most work is done through the [command line](cli.md) or the
|
|
7
|
-
[client](
|
|
6
|
+
Most work is done through the [command line](cli/plesty-server.md) or the
|
|
7
|
+
[client](cli/plesty-bench.md); this is for code that drives a bench directly, and for
|
|
8
8
|
contributors. What each layer is allowed to depend on is set out in
|
|
9
9
|
[Architecture](design/architecture.md).
|
|
10
10
|
|