Vr planner
Skill mpagot/os-autoinst-distri-opensuse-skills/skills/vr-planner
OSADO educated clankers
npx -y skills add mpagot/os-autoinst-distri-opensuse-skills --skill vr-plannerAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 4 stars4 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Plans how to verify changes to an os-autoinst-distri-opensuse (OSADO) checkout. Use this skill when the user asks "how do I test my change", "what verification run (VR) should I do", "which openQA job should I clone", or "what's affected by my edit". Determines required unit tests, affected test modules, YAML schedules, and openqa-clone-job commands.
SKILL.md
6.9 KB, as published. Nobody here has run it
Script paths below are relative to this skill's installed directory.
Pipeline overview
classify_changes.pl (orchestrator — call first)
├── tests/ → find_test_schedule.pl
├── lib/ → find_unit_test.pl + find_affected_tests.pl
├── data/ → find_data_consumers.pl
└── schedule/ → find_openqa_job.pl (NETWORK — confirm host first)
All scripts accept --repo /path/to/osado, --json, --verbose, and --help.
Process
Phase 1 — Classify and produce the testing plan
- Identify the OSADO repo path. If the user did not state it, ask them.
Verify it exists and contains both
lib/andtests/. Most of the time it should be the current folder. - Identify the change set. By default
classify_changes.plreadsgit diff --cached(staged). Honour the user if they ask for a different source:- unstaged working tree →
--git-diff - a specific commit →
--git-commit <hash> - an explicit list → pass file paths as positional args
- unstaged working tree →
- Run the orchestrator with all helpers chained:
This single call also runsperl scripts/classify_changes.pl \ --repo /path/to/osado --helpersfind_test_schedule.pl,find_unit_test.pl,find_affected_tests.pl, andfind_data_consumers.plfor the right buckets. It does NOT contact openQA. - Summarise the plan to the user. Report per category:
- file count and whether VR is needed,
- the concrete next action (unit-test command, affected tests, data consumers, or schedule files to clone from).
Phase 2 — Targeted deep-dive (only when the user asks)
If the user wants more detail on one category, call the matching helper directly with the specific files. Examples:
- "Which unit tests cover lib/foo.pm?" →
perl scripts/find_unit_test.pl --repo REPO --verbose lib/foo.pm - "What's affected by my lib change?" →
perl scripts/find_affected_tests.pl --repo REPO --verbose lib/foo.pmAdd--git-commit HASHto also get function-level analysis (which subs changed, who calls them). - "Where is tests/X/Y.pm scheduled?" →
perl scripts/find_test_schedule.pl --repo REPO --verbose tests/X/Y.pm - "Who consumes data/foo/bar.yaml?" →
perl scripts/find_data_consumers.pl --repo REPO --verbose data/foo/bar.yaml
Phase 3 — Find a clonable openQA job (network call gated)
find_openqa_job.pl queries a live openQA instance. Before invoking it:
- Always confirm the host with the user. Do not guess. Ask which
instance to query. The canonical options are:
--osd→http://openqa.suse.de(SLE, SLE Micro, SLES4SAP)--o3→http://openqa.opensuse.org(Tumbleweed, Leap)--host URL→ custom worker (e.g. dedicated cloud workers)
- Resolve test files to schedules first.
find_openqa_job.placceptsschedule/*.ymlpaths only. For test modules, pipe throughfind_test_schedule.pl --json:perl scripts/find_test_schedule.pl \ --repo REPO --json tests/X/Y.pm \ | jq -r '.results[].matches[] | select(.type=="yaml_schedule") | .file' \ | xargs perl scripts/find_openqa_job.pl --osd --repo REPO - Run the script and present the clone commands. Output is copy-paste
ready: a
openqa-clone-jobline with auto-detected CASEDIR (your fork + branch) and BUILD (your username). Override with--casedir/--buildif the user requests it.
Rules
- Do NOT modify any OSADO source code. This skill only analyses and reports.
- Do NOT run
openqa-cliorfind_openqa_job.plwithout first confirming the openQA host with the user. - Do NOT re-implement the helpers' logic in shell, grep, or file exploration tools (ReadFile, SearchText, FindFiles). Always call the Perl scripts.
- When
classify_changes.pl --helpersalready produced output for a category, do not run the same helper again unless the user asks for more detail. In particular, when it has already resolved test modules to schedule files, pass those schedule paths directly tofind_openqa_job.pl. Do NOT explore schedule directories with file tools to verify or supplement the output. - When
find_affected_tests.ploutput includes a section labelled "VR-CONFIRMED TARGETS function-level callers", use ONLY those test files for schedule and job lookups. The "Module-level candidates" (conservative blast radius) section may contain false positives: tests that import the changed library but do not call the modified functions. Never pass module-level candidates tofind_test_schedule.plorfind_openqa_job.plwhen function-level data is available. - Resolve
--repoto an absolute path before passing it. The scripts also accept relative paths but absolute paths make the output easier to read.
Known limitations to surface to the user when relevant
- Schedule fan-out cap.
find_openqa_job.plrefuses to query when a change touches more than 25 schedule files (e.g.lib/virt_autotest/common.pm,lib/hacluster.pm). Report the cap and ask the user to pick 1–3 schedules manually. - Dynamic/runtime loaders. publiccloud and parts of kernel/LTP load tests
via
lib/main_*.pmwith runtime conditions thatfind_test_schedule.plcannot resolve statically. Whenfind_test_schedule.plreports aloadtestmatch inside alib/main_*.pmfile, the user must browse the openQA web UI to find a passing job. - Private workers. Hosts like
vh012.qa2.suse.asiaoropenqaworker15.qe.prg2.suse.orgare VPN-only and not auto-detected; the user must pass them with--host. - Function-level analysis in
find_affected_tests.plrequires--git-commit HASH. Without it, only module-level blast radius is shown. - Changes scoped to
t/,.github/,Makefile,variables.md, or pure comment/lint fixes typically do NOT require a VR.
Output expectations
Keep the user-facing summary short:
- One line per category (count + VR needed).
- The exact
provecommand for each touchedt/file orlib/module that has a unit test. - The schedule file(s) the user should clone from (or the loader to inspect for programmatic tests).
- A note that running
find_openqa_job.plrequires confirming the host. </instructions>