Add 2.8 release notes and NVFlare CLI tutorial#4643
Conversation
## Summary - Add 2.8.0 release notes and wire them into the docs index pages. - Highlight major 2.8.0 themes: CLI automation, distributed provisioning, native Docker/Kubernetes job execution, multi-study support, live log streaming, security hardening, reliability, and examples. - Keep the release notes high-level while linking to detailed docs. ## Testing - git diff --cached --check - python3 -m sphinx -b html docs /tmp/nvflare_docs_280_check -q -W --keep-going (fails locally: missing sphinx_llm) --------- Co-authored-by: Yuan-Ting Hsieh (謝沅廷) <yuantingh@nvidia.com>
## Summary - Replace the old job CLI notebook with an end-to-end NVFlare CLI tutorial covering config, system, study, and job workflows. - Update hello-pt so the tutorial can export a runnable synthetic-data job with log streaming enabled. - Normalize job stats behavior when a job is no longer running and add focused coverage. ## Validation - pytest tests/unit_test/tool/job/job_stats_test.py - jq empty examples/tutorials/nvflare_cli.ipynb - verified source notebook has no outputs or execution counts
0093882 to
589730f
Compare
Greptile SummaryThis PR cherry-picks two 2.8.0-branch changes onto main: the 2.8.0 release notes and a replacement of the deprecated Job CLI tutorial with a new NVFlare CLI tutorial, along with supporting code updates to the
Confidence Score: 4/5Safe to merge — all code changes are additive and well-covered by the 18 passing tests listed in the PR description. The bulk of the PR is documentation and tutorial replacement, which carry no runtime risk. The three code changes — tests/unit_test/examples/hello_pt_client_test.py — the Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[cmd_job_stats called] --> B{Call session.show_stats}
B -->|Success| C[output_ok with stats JSON]
B -->|JobNotFound| D[output_error JOB_NOT_FOUND]
B -->|JobNotRunning| E[output_error JOB_NOT_RUNNING\ndetail: stats available only while running]
B -->|AuthenticationError| F[re-raise]
B -->|NoConnection| G[output_error CONNECTION_FAILED]
H[cmd_job_abort called] --> I{Call session.abort_job}
I -->|Success| J[output_ok]
I -->|JobNotRunning| K[output_error JOB_NOT_RUNNING\ndetail: abort available only while running]
I -->|AuthenticationError| L[re-raise]
Reviews (1): Last reviewed commit: "[2.8] Add NVFlare CLI tutorial (#4639)" | Re-trigger Greptile |
| finally: | ||
| sys.path.pop(0) | ||
| if original_model_module is not None: |
There was a problem hiding this comment.
sys.path.pop(0) assumes example_dir is still at index 0 when the finally block runs. If any import triggered by exec_module prepends its own entry to sys.path, pop(0) silently removes that entry instead of example_dir, leaving the test's path addition permanently in sys.path for subsequent tests. Using sys.path.remove(example_dir) (or a try/except around it) removes the correct entry by value regardless of what happened to the list during execution.
| finally: | |
| sys.path.pop(0) | |
| if original_model_module is not None: | |
| finally: | |
| try: | |
| sys.path.remove(example_dir) | |
| except ValueError: | |
| pass | |
| if original_model_module is not None: |
What this does
Cherry-picks the two recent 2.8 PRs onto main:
Verification