How this skill is triggered — by the user, by Claude, or both
Slash command
/microshift-ci:test-scenarioThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
```bash
/microshift-ci:test-scenario <job-url> <scenario-name>
The microshift-ci:test-scenario command retrieves comprehensive information about a specific test scenario executed within a MicroShift CI job. It returns detailed information containing:
This command is useful for detailed investigation of specific test scenarios and understanding test execution results.
This command works by:
If no scenario name is provided it will prompt to the user what scenario to use.
The command uses the plugins/microshift-ci/scripts/extract-version.py helper script (relative to repo root) to determine the exact MicroShift version tested in the scenario.
$1 (job-url): URL to the Prow CI job - Required
https://prow.ci.openshift.org/view/gs/test-platform-results/logs/<job-name>/<job-id>https://gcsweb-ci.apps.ci.l2s4.p1.openshiftapps.com/gcs/test-platform-results/logs/<job-name>/<job-id>$2 (scenario-name): Name of the scenario to analyze - Required
el96-lrel@standard1, el96-lrel@lvm, el96-lrel@dual-stackGoal: Extract job information and scenario name from the arguments.
Actions:
el[0-9]+-[a-z0-9]+@.+)list_scenarios = true flagExample:
// Input
job_url = "https://prow.ci.openshift.org/view/gs/test-platform-results/logs/periodic-ci-openshift-microshift-release-4.20-periodics-e2e-aws-tests-bootc-release-periodic/1979744605507162112"
scenario_name = "el96-lrel@standard1"
// Parsed
job_id = "1979744605507162112"
job_name = "periodic-ci-openshift-microshift-release-4.20-periodics-e2e-aws-tests-bootc-release-periodic"
version = "4.20"
job_type = "e2e-aws-tests-bootc-release-periodic"
arch = "x86_64"
image_type = "bootc"
Goal: Build URLs to the scenario's artifacts.
Actions:
Construct base artifact URL:
https://gcsweb-ci.apps.ci.l2s4.p1.openshiftapps.com/gcs/test-platform-results/logs/<job-name>/<job-id>/artifacts/<job-type>/openshift-microshift-e2e-metal-tests/artifacts/scenario-info/<scenario-name>/
Construct specific artifact URLs:
<base-url>/junit.xml<base-url>/boot_and_run.log<base-url>/rf-debug.log<base-url>/phase_*/*.logGoal: If no scenario name was provided, list all available scenarios in the job.
Actions:
Fetch the scenario-info directory listing:
https://gcsweb-ci.apps.ci.l2s4.p1.openshiftapps.com/gcs/test-platform-results/logs/<job-name>/<job-id>/artifacts/<job-type>/openshift-microshift-e2e-metal-tests/artifacts/scenario-info/
Use WebFetch to parse the HTML directory listing
Extract all scenario directory names
Return formatted list of scenarios
Output Format (if listing scenarios):
# Available Test Scenarios
Job: periodic-ci-openshift-microshift-release-4.20-periodics-e2e-aws-tests-bootc-release-periodic
Job ID: 1979744605507162112
## Scenarios (11 total)
- el94-y2@el96-lrel@standard1
- el94-y2@el96-lrel@standard2
- el96-lrel@ai-model-serving-online
- el96-lrel@dual-stack
- el96-lrel@ginkgo-tests
- el96-lrel@ipv6
- el96-lrel@low-latency
- el96-lrel@lvm
- el96-lrel@multi-nic
- el96-lrel@standard1
- el96-lrel@standard2
Goal: Get test execution results from JUnit XML.
Actions:
Example Parsing:
import xml.etree.ElementTree as ET
root = ET.fromstring(xml_content)
testsuite = root.find('.//testsuite')
test_results = {
'total': int(testsuite.get('tests', '0')),
'passed': 0,
'failures': int(testsuite.get('failures', '0')),
'errors': int(testsuite.get('errors', '0')),
'skipped': int(testsuite.get('skipped', '0')),
'time': float(testsuite.get('time', '0')),
'test_cases': []
}
for testcase in testsuite.findall('.//testcase'):
name = testcase.get('name')
status = 'passed'
message = None
if testcase.find('failure') is not None:
status = 'failed'
message = testcase.find('failure').get('message')
elif testcase.find('error') is not None:
status = 'error'
message = testcase.find('error').get('message')
elif testcase.find('skipped') is not None:
status = 'skipped'
test_results['test_cases'].append({
'name': name,
'status': status,
'message': message
})
test_results['passed'] = test_results['total'] - test_results['failures'] - test_results['errors'] - test_results['skipped']
Goal: Parse scenario name to extract configuration details.
Actions:
Parse scenario name to extract components:
el94-y2@el96-lrel@... → upgrade from 9.4 to 9.6)Determine test category from test type:
standard1, standard2 → "Standard Tests"lvm → "LVM Storage Tests"dual-stack → "Dual-Stack Networking Tests"ipv6 → "IPv6 Networking Tests"multi-nic → "Multi-NIC Configuration Tests"low-latency → "Low-Latency Tests"ginkgo-tests → "Ginkgo Integration Tests"ai-model-serving-online → "AI Model Serving Tests"Example:
// Scenario: el96-lrel@standard1
{
"rhel_version": "9.6",
"release_type": "latest",
"test_category": "Standard Tests",
"test_variant": "1",
"is_upgrade": false
}
// Scenario: el94-y2@el96-lrel@standard1
{
"source_rhel_version": "9.4",
"target_rhel_version": "9.6",
"release_type": "latest",
"test_category": "Standard Tests",
"test_variant": "1",
"is_upgrade": true
}
Goal: Extract when the scenario was executed and how long it took.
Actions:
time attribute as fallbackGoal: Provide direct links to all relevant artifacts for the scenario.
Actions:
Build URLs for common artifacts:
Categorize artifacts:
Common Issues and Responses:
# Error: Scenario Not Found
Scenario 'el96-lrel@invalid' does not exist in job 1979744605507162112
## Available Scenarios
- el96-lrel@standard1
- el96-lrel@lvm
- ...
# Error: Job Not Found
Could not fetch artifacts for job ID 1234567890
Please verify the job URL and ensure the job has completed.
# Warning: Partial Data Available
Some artifacts were not available for this scenario.
## Missing Artifacts
- junit.xml
Displaying available information below...
/microshift-ci:test-scenario https://prow.ci.openshift.org/view/gs/test-platform-results/logs/periodic-ci-openshift-microshift-release-4.20-periodics-e2e-aws-tests-bootc-release-periodic/1979744605507162112 el96-lrel@standard1
Output:
# Test Scenario Analysis: el96-lrel@standard1
## Job Information
- **Job Name**: periodic-ci-openshift-microshift-release-4.20-periodics-e2e-aws-tests-bootc-release-periodic
- **Job ID**: 1979744605507162112
- **Version**: 4.20
- **Architecture**: x86_64
- **Image Type**: bootc
## Scenario Configuration
- **Name**: el96-lrel@standard1
- **Description**: RHEL 9.6 Latest Release - Standard Tests
- **RHEL Version**: 9.6
- **Release Type**: Latest
- **Test Category**: Standard Tests
- **Upgrade Test**: No
## Test Results
**Status**: PASSED
### Summary
- **Total Tests**: 65
- **Passed**: 65
- **Failed**: 0
- **Errors**: 0
- **Skipped**: 0
## Artifacts
- [JUnit XML](https://gcsweb-ci.apps.ci.l2s4.p1.openshiftapps.com/gcs/.../junit.xml)
- [Boot and Run Log](https://gcsweb-ci.apps.ci.l2s4.p1.openshiftapps.com/gcs/.../boot_and_run.log)
/microshift-ci:test-scenario https://prow.ci.openshift.org/view/gs/test-platform-results/logs/periodic-ci-openshift-microshift-release-4.20-periodics-e2e-aws-tests-bootc-release-periodic/1979744605507162112
Output:
# Available Test Scenarios
Job: periodic-ci-openshift-microshift-release-4.20-periodics-e2e-aws-tests-bootc-release-periodic
Job ID: 1979744605507162112
## Scenarios (5 total)
- el96-lrel@standard1
- el96-lrel@standard2
- el96-lrel@lvm
- el96-lrel@dual-stack
- el96-lrel@ipv6
/microshift-ci:test-scenario https://prow.ci.openshift.org/view/gs/test-platform-results/logs/periodic-ci-openshift-microshift-release-4.20-periodics-e2e-aws-tests-release-periodic/1234567890 el96-lrel@lvm
Output would include failure details:
# Test Scenario Analysis: el96-lrel@lvm
## Job Information
- **Job Name**: periodic-ci-openshift-microshift-release-4.20-periodics-e2e-aws-tests-release-periodic
- **Job ID**: 1234567890
- **Version**: 4.20
## Scenario Configuration
- **Name**: el96-lrel@lvm
- **Description**: RHEL 9.6 Latest Release - LVM Storage Tests
- **Test Category**: LVM Storage Tests
## Test Results
**Status**: FAILED
### Summary
- **Total Tests**: 45
- **Passed**: 43
- **Failed**: 2
- **Errors**: 0
- **Skipped**: 0
### Failed Tests
1. **LVM volume creation**
- **Error**: Failed to create LVM volume: insufficient space
- **Log**: [create-lvm.log](https://gcsweb-ci.apps.ci.l2s4.p1.openshiftapps.com/gcs/.../phase_create-and-run/create-lvm.log)
## Artifacts
- [JUnit XML](https://gcsweb-ci.apps.ci.l2s4.p1.openshiftapps.com/gcs/.../junit.xml)
- [Boot and Run Log](https://gcsweb-ci.apps.ci.l2s4.p1.openshiftapps.com/gcs/.../boot_and_run.log)
- [Debug Log](https://gcsweb-ci.apps.ci.l2s4.p1.openshiftapps.com/gcs/.../rf-debug.log)
npx claudepluginhub openshift-eng/edge-tooling --plugin microshift-ciGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.