Add vdsm CI workflow with golden image caching#24
Conversation
Enables CI workflows to run the golden image builder end-to-end without stopping at the 'Overwrite existing golden image?' prompt. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
New .github/workflows/vdsm.yml runs the 47 vdsm integration tests on ubuntu-24.04 with /dev/kvm access. Golden image is cached via actions/cache, keyed on DSM version + hash of setup scripts. On cache miss, scripts/vdsm_setup.py builds a fresh image. Job is marked continue-on-error until proven stable in CI — promotion to a required check is a follow-up. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
DSM 7.2.2's synoshare CLI has no --setopt subcommand. The call I added in PR #23 for QA F2 was based on an incorrect assumption and wasn't verified against a fresh golden image build. It only surfaced in CI because my local run used a pre-existing golden image. The production code in list_recycle_bin already handles the disabled case gracefully (returns "Recycle bin is not enabled" instead of raising), and test_02_list_recycle_bin's permissive assertion accepts either response. Removing the enablement step actually exercises the more valuable 408 fallback path. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
QA Review -- Round 1Reviewer: QA Agent FindingsF1 (substantive) -- Undisclosed revert of PR #23 approved changes Commit Reverting previously-approved code in a PR with a different stated purpose is scope creep. The commit message is candid about why the revert is needed (the Two acceptable resolutions:
Also: my F2 in PR #23 was wrong. I requested enforcement of a CLI flag that doesn't exist. Good engineering that the Dev verified against actual DSM behavior in CI and pushed back rather than papering over the failure. Noted as a lesson -- I should verify CLI flag existence against a fresh environment before insisting on enforcement in future reviews. F2 (observation) --
F3 (observation) --
F4 (observation) -- Cache key omits
F5 (nit) -- Line 31: makes CI Workflow Assessment (positive observations)
Verified via CI log
Remaining PR checkboxes (not CI-verifiable from this session)
Summary
The CI workflow is well-designed and verified working (47/47 on cache miss). The concern is the undisclosed revert of code approved in PR #23. An updated PR summary + CHANGELOG call-out resolves F1. Verdict: QA Failed -- F1 requires PR body / CHANGELOG update to disclose the revert. Observations F2-F4 can be addressed in the same round or deferred per Dev's call. |
F1: CHANGELOG now has a dedicated ### Fixed entry for the
synoshare --setopt revert, and the PR body summary documents
the revert as in-scope.
F2: Add comment explaining FORCE_JAVASCRIPT_ACTIONS_TO_NODE24 env var.
F3: Update TestRecycleBin docstring — no longer claims recycle bin
must be enabled; test is tolerant of both states.
F4: Add comment documenting the cache key design choice (why
pyproject.toml/uv.lock are intentionally excluded).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
QA Review -- Round 2 (re-review of c74b355)All findings from Round 1 resolved:
Bonus: cache hit checkbox now verified. This CI run hit the cache from the previous run. Results:
Total job time dropped from 13m12s to 4m49s on cache hit -- roughly 8 minutes saved by skipping the golden image build. Test time is similar (~3-4 min) which is expected. CI: All green (11/11 checks pass). Verified via CI log (updated)
Remaining checkboxes (not CI-verifiable)
Zero open items. Adding Ready for QA Signoff. |
Summary
Closes the last phase of #18 by adding a GitHub Actions workflow that runs the 47 vdsm integration tests on every PR.
Job design:
.github/workflows/vdsm.yml), independent fromci.ymlso a vdsm flake never blocks unit-test mergesruns-on: ubuntu-24.04— Azure-backed GH-hosted runners expose/dev/kvmfor nested KVMactions/cache@v4, keyed on DSM version + hash of setup scriptsscripts/vdsm_setup.py --yesto build from scratch (~10 min)continue-on-error: trueinitially — not a blocking required check until stable across several runstimeout-minutes: 30Prep change:
scripts/vdsm_setup.pygets a--yes/-yflag so the overwrite prompt doesn't stop the non-interactive CI run.In-scope revert of PR #23 recycle bin enablement: The first CI run (the fresh golden image build) surfaced that PR #23's
synoshare --setopt testshare enable_recycle_bin=yescall fails with rc=255 on DSM 7.2.2 —--setoptis not a validsynosharesubcommand. The call only worked locally because the pre-existing golden image pre-dated the change. Commitae65df4removes the enablement step; the integration test still passes becauselist_recycle_bin's production 408 handler (also added in PR #23) returns the "Recycle bin is not enabled" message gracefully, andtest_02_list_recycle_bin's assertion (isinstance(result, str)) accepts both states. Documented in### Fixedof the CHANGELOG and in theTestRecycleBinclass docstring.Test plan
Automated
lint,typecheck,test (3.11|3.12|3.13),version-syncstill passvdsmjob runs to completionManual
continue-on-error: true)Follow-up (not in this PR)
main, promote the job to a required check by removingcontinue-on-errorand adding to branch protection🤖 Generated with Claude Code