prow-ci
Fetch and analyze OpenShift Prow CI job failures with automated artifact download and failure pattern detection
Source facts
- Repository
- openshift/managed-node-metadata-operator
- Last source activity
- June 5, 2026 at 04:27
- Detected SKILL.md language
- English
- Stars
- 3
- Forks
- 49
Install options
The review-first prompt is selected by default. You can switch to a direct command or download a local copy.
Review the source files
Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.
File Explorer
3 filesShowing SKILL.md
SKILL.md
Source instructions · Read-only preview- name
- prow-ci
- description
- Fetch and analyze OpenShift Prow CI job failures with automated artifact download and failure pattern detection
- trigger
- prow, prow-ci, /prow-ci, ci results, check ci, analyze ci failure
# Prow CI Analysis for Managed Node Metadata Operator
This skill fetches Prow CI job artifacts from Google Cloud Storage and provides automated failure analysis.
## Prerequisites
Before using this skill, verify gcloud CLI is installed:
```bash
which gcloud
```
If not installed, provide instructions from: https://cloud.google.com/sdk/docs/install
**Note**: The `test-platform-results` GCS bucket is publicly accessible - no authentication required.
## Quick Start
```bash
# Check PR status and get Prow job URLs
gh pr checks <PR_NUMBER>
# Analyze a failed job
/prow-ci <prow-job-url>
# Or ask naturally:
"Analyze the lint failure in PR <NUMBER>"
"Check why the validate job failed"
"Show me what broke in the coverage job"
```
## Implementation
When invoked, this skill:
1. **Fetches artifacts** using `fetch_prow_artifacts.py`:
- Downloads **prowjob.json** (job metadata)
- Downloads **build-log.txt** (complete build output with all errors)
- Saves to `.work/prow-artifacts/<build-id>/`
- **Note**: Script is optimized to only download essential files. Optional artifacts (JUnit XML, per-target logs) are skipped as build-log.txt contains all needed information.
2. **Analyzes failures** using `analyze_failure.py`:
- Parses build-log.txt for error patterns
- Detects common failure patterns (lint, build, timeout, OOM)
- Extracts error messages and stack traces
- Identifies compilation errors and test failures
3. **Generates report**:
- Markdown format with failure summary
- Pattern detection (compilation errors, lint failures, timeouts)
- Top error messages and failures
- Actionable failure details
## Usage Instructions
### Step 1: Get Prow Job URL
```bash
# View PR checks to find failed jobs
gh pr checks <PR_NUMBER>
# Or get detailed status
gh pr view <PR_NUMBER> --json statusCheckRollup --jq '.statusCheckRollup[] | select(.state == "FAILURE")'
```
Example Prow job URL:
```text
https://prow.ci.openshift.org/view/gs/test-platform-results/pr-logs/pull/openshift_managed_node_metadata_operator/<PR_NUMBER>/pull-ci-openshift-managed-node-metadata-operator-master-lint/<BUILD_ID>
```
### Step 2: Fetch and Analyze
Run the fetch script from repository root:
```bash
# From repository root
python3 .claude/skills/prow-ci/fetch_prow_artifacts.py "<prow-job-url>" -o .work/prow-artifacts
```
This downloads only the essential files:
- `prowjob.json` - Job metadata (job name, state, type, URL)
- `build-log.txt` - Complete build output (contains all errors, test failures, and output)
### Step 3: Analyze Failures
```bash
python3 .claude/skills/prow-ci/analyze_failure.py .work/prow-artifacts/<build-id> -f markdown
```
Output includes:
- Job information (name, state, URL)
- Detected failure patterns (lint errors, build failures, timeouts)
- Top error messages from build log
- Failure details extracted from log
### Step 4: Present Findings
Create a clear summary for the user with:
- Root cause identification
- Detected patterns (lint, build, timeout, etc.)
- Key error messages
- Actionable next steps to fix the issue
### Example Workflow
```bash
# User provides: "Analyze the lint failure in PR <NUMBER>"
# 1. Get Prow job URL
gh pr checks <PR_NUMBER> | grep lint
# 2. Fetch artifacts
python3 .claude/skills/prow-ci/fetch_prow_artifacts.py \
"https://prow.ci.openshift.org/view/gs/test-platform-results/pr-logs/pull/openshift_managed_node_metadata_operator/<PR_NUMBER>/pull-ci-openshift-managed-node-metadata-operator-master-lint/<BUILD_ID>"
# 3. Analyze
python3 .claude/skills/prow-ci/analyze_failure.py \
.work/prow-artifacts/<BUILD_ID> \
-f markdown
# 4. Review the output and provide actionable summary
```
## Prow Resources
**Main Dashboard**: https://prow.ci.openshift.org/
**CI Search**: https://github.com/openshift/ci-search
**Job History**: https://prow.ci.openshift.org/?repo=openshift%2Fmanaged-node-metadata-operator
## Common Use Cases
### 1. Check Recent CI Results
```bash
# Check latest job status for specific PR
gh pr view PR_NUMBER --json statusCheckRollup --jq '.statusCheckRollup[] | select(.context | contains("prow"))'
# Or view all checks for a PR
gh pr checks PR_NUMBER
```
### 2. Access Build Logs
Prow logs are stored at:
- **Pull request jobs**: `gs://test-platform-results/pr-logs/pull/openshift_managed_node_metadata_operator/[PR_NUMBER]/[JOB_NAME]/[JOB_ID]`
- **Periodic jobs**: `gs://test-platform-results/logs/[JOB_NAME]/[JOB_ID]`
**Viewing logs via web**:
```text
https://prow.ci.openshift.org/view/gs/test-platform-results/pr-logs/pull/openshift_managed_node_metadata_operator/[PR_NUMBER]/[JOB_NAME]/[JOB_ID]
```
### 3. Analyze Test Failures
```bash
# Get PR checks
gh pr view PR_NUMBER --json statusCheckRollup
# Find failed jobs
gh pr checks PR_NUMBER | grep -i "fail"
# Use this skill to fetch and analyze failures
# The script downloads prowjob.json and build-log.txt for analysis
```
### 4. Common Job Names
**Prow CI Jobs** (configured in openshift/release):
- `pull-ci-openshift-managed-node-metadata-operator-master-e2e-binary-build-success` - E2E binary build verification
- `pull-ci-openshift-managed-node-metadata-operator-master-coverage` - Code coverage analysis (with Codecov)
- `pull-ci-openshift-managed-node-metadata-operator-master-lint` - Linting checks
- `pull-ci-openshift-managed-node-metadata-operator-master-test` - Unit tests
- `pull-ci-openshift-managed-node-metadata-operator-master-validate` - Validation checks
**Tekton Pipelines** (configured in `.tekton/`):
- `managed-node-metadata-operator-pull-request` - Main PR pipeline (docker build with OCI-TA)
- `managed-node-metadata-operator-e2e-pull-request` - E2E testing pipeline
- `managed-node-metadata-operator-pko-pull-request` - PKO (Package Operator) pipeline
- Corresponding `-push` pipelines for merged commits
## Debugging CI Failures
### Step 1: Identify Failed Job
```bash
gh pr checks PR_NUMBER
```
### Step 2: Access Prow UI
Open the Prow link from PR checks or construct manually:
```text
https://prow.ci.openshift.org/?repo=openshift%2Fmanaged-node-metadata-operator&type=presubmit
```
### Step 3: Review Logs
Click on failed job → "Build Log" tab
### Step 4: Check Artifacts
Look for:
- Test failure logs
- Coverage reports
- Generated artifacts
### Step 5: Reproduce Locally
Many Prow jobs can be reproduced with:
```bash
# For unit tests (matches: pull-ci-...-test)
make go-test
# For linting (matches: pull-ci-...-lint)
make go-check
# OR use prek for comprehensive linting
prek run --all-files
# For validation (matches: pull-ci-...-validate)
make validate
# For coverage (matches: pull-ci-...-coverage)
make coverage
# For E2E binary build (matches: pull-ci-...-e2e-binary-build-success)
make e2e-binary-build
# For container builds (Tekton pipelines)
make docker-build
```
## CI/Prow Integration in This Repo
This repo uses **both Prow and Tekton** for comprehensive CI:
**Prow CI** (openshift/release):
- Configuration: `ci-operator/config/openshift/managed-node-metadata-operator/openshift-managed-node-metadata-operator-master.yaml`
- Runs: lint, test, validate, coverage, e2e-binary-build
- Uses Codecov for coverage reporting (secret: `managed-node-metadata-operator-codecov-token`)
- Skip rules: Changes to `.tekton/`, GitHub (`.github/`), `.md` files, `OWNERS`, `LICENSE` don't trigger most jobs
**Tekton Pipelines** (`.tekton/`):
- Primary build pipeline using Pipelines as Code
- Three pipeline types: main, e2e, pko
- Builds container images to Quay (managed-node-metadata-operator-tenant)
- Pull request images expire after 5 days
- Uses boilerplate framework from `openshift/boilerplate` (docker-build-oci-ta pipeline)
## Quick Reference Commands
```bash
# Check all PR checks status
gh pr checks <PR_NUMBER>
# View detailed status for a specific PR
gh pr view <PR_NUMBER> --json statusCheckRollup
# Filter only Prow jobs
gh pr checks <PR_NUMBER> | grep "pull-ci-openshift-managed-node-metadata-operator"
# Check Tekton pipeline status
gh pr view <PR_NUMBER> --json statusCheckRollup --jq '.statusCheckRollup[] | select(.context | contains("Tekton"))'
# Open Prow dashboard in browser (cross-platform)
# Copy and paste this URL into your browser:
# https://prow.ci.openshift.org/?repo=openshift%2Fmanaged-node-metadata-operator
# Or use platform-specific command:
# macOS: open "https://prow.ci.openshift.org/?repo=openshift%2Fmanaged-node-metadata-operator"
# Linux: xdg-open "https://prow.ci.openshift.org/?repo=openshift%2Fmanaged-node-metadata-operator"
# Windows: start "https://prow.ci.openshift.org/?repo=openshift%2Fmanaged-node-metadata-operator"
# View specific PR on Prow (replace <PR_NUMBER>)
# https://prow.ci.openshift.org/?repo=openshift%2Fmanaged-node-metadata-operator&type=presubmit&pull=<PR_NUMBER>
```
## Troubleshooting
### Can't find job results?
- Check both Prow AND Tekton - this repo uses both systems
- Prow jobs: `pull-ci-openshift-managed-node-metadata-operator-master-*`
- Tekton jobs: Usually show as "Tekton" or pipeline names in PR checks
- Verify repo name format in Prow: `openshift_managed_node_metadata_operator` (underscore, not dash)
- Ensure PR has been opened and CI has run
### Logs show permission denied?
- Prow logs are public for openshift org
- Use web UI (prow.ci.openshift.org) instead of gsutil
- Check if job ID is correct
### Job still running?
- Check Prow dashboard for in-progress jobs
- Look for "Pending" or "Running" status
- Wait for completion before accessing artifacts
### Tekton pipeline failures?
- Check the pipeline link in PR checks (usually links to Konflux/AppStudio UI)
- Tekton logs are in the AppStudio dashboard, not Prow
- Common issues:
- Image build failures → Check Dockerfile syntax and build context
- Pipeline timeout → Check for slow steps or network issues
- Auth failures → Secret configuration in `managed-node-metadata-operator-tenant` namespace
- Local validation:
```bash
# Validate Tekton YAML syntax
kubectl apply --dry-run=client -f .tekton/
# Test container build locally
podman build -f build/Dockerfile -t test:local .
```
## Advanced: CI Search
For historical job searches:
```bash
# Clone ci-search tool
git clone https://github.com/openshift/ci-search.git
# Use web interface at search.ci.openshift.org (if available)
# Search for patterns in build logs across all jobs
```
## References
- [Prow Dashboard](https://prow.ci.openshift.org/)
- [CI Search Tool](https://github.com/openshift/ci-search)
- [OpenShift CI Documentation](https://docs.ci.openshift.org/)
## CI Configuration Files
**Prow Configuration** (in openshift/release repo):
- Location: `ci-operator/config/openshift/managed-node-metadata-operator/openshift-managed-node-metadata-operator-master.yaml`
- Update process: Submit PR to openshift/release repository
- Auto-generated jobs in: `ci-operator/jobs/openshift/managed-node-metadata-operator/`
**Tekton Pipelines** (in this repo):
- Location: `.tekton/` directory
- Files:
- `managed-node-metadata-operator-pull-request.yaml` - Main PR pipeline
- `managed-node-metadata-operator-push.yaml` - Post-merge pipeline
- `managed-node-metadata-operator-e2e-pull-request.yaml` - E2E testing
- `managed-node-metadata-operator-pko-pull-request.yaml` - PKO validation
- Triggered by: Pipelines as Code (via Tekton)
- Uses: Boilerplate docker-build-oci-ta pipeline from openshift/boilerplate
## Coverage Reporting
This repository uses Codecov for coverage tracking:
- Secret: `managed-node-metadata-operator-codecov-token` (stored in Prow)
- Generate coverage locally: `make coverage`
- Coverage runs on PRs and post-merge (`publish-coverage`)
- Dashboard: Check Codecov for managed-node-metadata-operator
## Integration with Other Skills
- Use with **test-agent** to compare local test results with CI
- Use with **ci-agent** to validate CI configuration
- Use with **lint-agent** when investigating lint failures in CI
- Use with **security-agent** when investigating pre-commit hook failures
View on GitHub