원클릭으로
analyze-build
Analyze the root cause inside a failed prowjob when a user mentions a failure or adds a prowjob URL.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Analyze the root cause inside a failed prowjob when a user mentions a failure or adds a prowjob URL.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Analyze the root cause inside a failed prowjob. Use when user mentions to analyze a prowjob failure or adds a prowjob url
Analyze root causes for all the recent ci-failures. Use when user mentions to analyze recent ci failures
Analyze all failed builds for a GitHub pull request. Use when user provides a GitHub PR URL and wants to understand why builds are failing.
Analyze root causes for all the recent CI failures (failing prowjobs that have not reached the testing stage).
Analyze all failed builds for a GitHub pull request and identify root causes.
Unified flake analysis combining PR-based flakefinder data with periodic lane failure rates. Use when the user wants an overview of test flakiness across the project.
| name | analyze-build |
| description | Analyze the root cause inside a failed prowjob when a user mentions a failure or adds a prowjob URL. |
| argument-hint | <prowjob-url> |
| allowed-tools | Read, Glob, Bash(go run *) |
This skill helps the user to find the root cause and mitigations for failing prowjobs.
It combines four analyses:
KUBEVIRT_PROFILE_ETCD=true, downloads etcd-storage-profile.json from artifacts/etcd-profiler/ and detects tmpfs exhaustion, tmpfs pressure, large WAL files, and DB growth trendsAs a base for analyzing the failure, the go tool cmd/ci-failures from the kubevirt.io/ci-health repository is to be used.
If not already inside the ci-health repository, cd into it first (e.g. cd kubevirt.io/ci-health from the github.com directory).
Example how to generate the data files for a specific prowjob, given is the url to the prowjob build:
$ go run ./cmd/ci-failures analyze-build $ARGUMENTS
This produces up to two output files in a session directory:
output/tmp/sessions/<session-id>/{job-name}.yaml — build log error analysisoutput/tmp/sessions/<session-id>/k8s-analysis-{build-id}.yaml — kubernetes cluster state analysis (if k8s-reporter artifacts exist), includes etcd profiler findings and full etcd profile data when availableThe tool logs each written file path. Extract the session directory from the first "wrote analysis to ..." or "wrote k8s analysis to ..." log line (e.g. output/tmp/sessions/abc123/).
Before diving into individual test failures, assess whether the entire build was an infrastructure flake:
This avoids wasting time analyzing each test individually when the real problem is a bad node or a crashed component.
Consider suggesting the test-failure-rate skill on this build URL as a quick pre-filter. If all failing tests are already known flakes (success rate < 80% across lanes), the build failure is likely not actionable and the user can retrigger instead of investigating.
After data generation:
*.yaml files in that directory{job-name}.yaml). The structure is:
job_name: the Prow job namebuild_errors: list of build errors with result, passed, category, category_reason, and build_log_error_snippetsresult: the Prow build result from finished.json — one of SUCCESS, FAILURE, ABORTED, ERRORpassed: boolean from finished.jsoncategory is prow-aborted, the job was killed by Prow (e.g., superseded by a newer commit) — report this immediately and skip all further analysis (k8s, container logs, etc.)category is prow-error, the job failed to schedule — report this and skip further analysisk8s-analysis-*.yaml) if present. The structure is:
snapshots: list of cluster state capture points (process + failure count)findings: list of detected issues, each with detector, severity, kind, name, reason, message, and snapshotsummary: aggregate counts by kind, severity, and detectoretcd_profile (optional): full etcd storage profile with peak_tmpfs_used_bytes, final_tmpfs_total_bytes, final_wal_size_bytes, and per-spec records showing DB size deltas and tmpfs usage. Etcd-related findings use kind EtcdProfile and detectors etcd-tmpfs-exhaustion, etcd-tmpfs-pressure, etcd-large-wal, etcd-db-growthcontainer_log_files in the k8s analysis YAML. Each entry has:
pod_name, container_name, namespace: identify the componentcached_path: local file path to grepsize_bytes: file sizetestvmi-xxxxx) and k8s findings (e.g. VMIs stuck in Scheduling), then use grep on the cached virt-controller and virt-handler logs to find why those VMIs failed. Common patterns to look for:
admission webhook or validation failed)syncError or failed to sync)device not found, resource not available)grep -i "testvmi-xxxxx" <cached_path> to find all log lines related to a specific VMIAfter the root-cause summary, suggest follow-up analyses when appropriate: