# Fetch Jira Issue

> Fetch JIRA issue details including status, assignee, comments, and progress classification

- Skill: `openshift-eng/fetch-jira-issue` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add openshift-eng/fetch-jira-issue`
- Raw SKILL.md: https://api.skillmd.com/api/skills/openshift-eng/fetch-jira-issue/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: openshift-eng (https://skillmd.com/u/openshift-eng)
- Updated: 2026-09-10
- Page: https://skillmd.com/skills/openshift-eng/fetch-jira-issue

---


# Fetch JIRA Issue

This skill fetches detailed information about a JIRA issue from the Red Hat JIRA REST API. It retrieves status, assignee, priority, resolution, comments, linked PRs, and classifies the issue's progress as ACTIVE, STALLED, or NEEDS_ATTENTION.

## When to Use This Skill

Use this skill when you need to:

- Check the status and progress of a JIRA bug linked to a regression triage
- Determine if a bug is being actively worked on or needs attention
- Extract PR links from JIRA comments
- Get assignee and component information for a JIRA issue
- Analyze recent comment activity on a bug

## Prerequisites

1. **JIRA API Token**: Required for authentication
   - Set environment variable: `export JIRA_API_TOKEN="your-token"`
   - Set environment variable: `export JIRA_USERNAME="your-atlassian-email"`
   - Obtain from: https://id.atlassian.com/manage-profile/security/api-tokens
   - Alternatively, pass `--token TOKEN` and `--username USERNAME` on the command line

2. **Network Access**: Must be able to reach redhat.atlassian.net
   - Check: `curl -s -o /dev/null -w '%{http_code}' https://redhat.atlassian.net`

3. **Python 3**: Python 3.6 or later
   - Check: `python3 --version`
   - Uses only standard library (no external dependencies)

## Implementation Steps

### Step 1: Run the Python Script

```bash
# Path to the Python script
script_path="plugins/ci/skills/fetch-jira-issue/fetch_jira_issue.py"

# Fetch issue data in JSON format (default)
python3 "$script_path" OCPBUGS-74401 --format json

# Or fetch as human-readable summary
python3 "$script_path" OCPBUGS-74401 --format summary

# Pass token explicitly instead of using JIRA_API_TOKEN env var
python3 "$script_path" OCPBUGS-74401 --token "your-token" --format json
```

### Step 2: Parse the Output

The script outputs structured JSON data that can be further processed:

```bash
# Store result in variable
jira_data=$(python3 "$script_path" OCPBUGS-74401 --format json)

# Extract key fields
status=$(echo "$jira_data" | jq -r '.status')
assignee=$(echo "$jira_data" | jq -r '.assignee.display_name // "Unassigned"')
progress_level=$(echo "$jira_data" | jq -r '.progress.level')
progress_reason=$(echo "$jira_data" | jq -r '.progress.reason')

# Check progress classification
echo "Status: $status"
echo "Assignee: $assignee"
echo "Progress: $progress_level - $progress_reason"
```

### Step 3: Use Progress Classification

The skill automatically classifies issue progress:

- **ACTIVE**: Issue is being worked on (assigned with recent activity, PRs linked, or active status)
- **STALLED**: Issue is assigned but has no activity in 14+ days
- **NEEDS_ATTENTION**: Issue is NEW/unassigned or has no progress
- **RESOLVED**: Issue is closed/verified

```bash
# Example: Check if a triaged regression's bug needs attention
progress_level=$(echo "$jira_data" | jq -r '.progress.level')

case "$progress_level" in
  "ACTIVE")
    echo "Bug is being worked on - no action needed"
    ;;
  "STALLED")
    echo "Bug may need attention - consider commenting or reassigning"
    ;;
  "NEEDS_ATTENTION")
    echo "Bug needs someone to pick it up"
    ;;
  "RESOLVED")
    echo "Bug is closed"
    ;;
esac
```

## Error Handling

The script exits with code 1 and prints errors to stderr for these cases:

- **No token**: `JIRA_API_TOKEN` not set and `--token` not provided
- **Auth failure (401)**: Token is invalid or expired
- **Access denied (403)**: Token lacks permissions for the project
- **Not found (404)**: Issue key doesn't exist
- **Network error**: Cannot reach redhat.atlassian.net

```bash
# Example: Handle missing token gracefully
if [ -z "$JIRA_API_TOKEN" ] || [ -z "$JIRA_USERNAME" ]; then
  echo "Warning: JIRA_API_TOKEN or JIRA_USERNAME not set. Skipping JIRA analysis."
else
  jira_data=$(python3 "$script_path" "$jira_key" --format json 2>/dev/null)
  if [ $? -ne 0 ]; then
    echo "Warning: Failed to fetch JIRA issue. Continuing without JIRA data."
  fi
fi
```

## Output Format

### JSON Format (--format json)

```json
{
  "key": "OCPBUGS-74401",
  "url": "https://redhat.atlassian.net/browse/OCPBUGS-74401",
  "summary": "ovn-ipsec-host creates duplicate openssl attribute",
  "status": "Modified",
  "resolution": null,
  "priority": "Critical",
  "assignee": {
    "display_name": "Jane Developer",
    "email": "jdeveloper@redhat.com"
  },
  "reporter": {
    "display_name": "John Reporter",
    "email": "jreporter@redhat.com"
  },
  "components": ["Networking / cluster-network-operator"],
  "labels": ["Regression"],
  "fix_versions": ["4.22"],
  "created": "2026-01-20T14:30:00.000+0000",
  "updated": "2026-02-10T09:15:00.000+0000",
  "comment_count": 5,
  "comments": [
    {
      "author": "Jane Developer",
      "created": "2026-02-08T10:00:00.000+0000",
      "body": "PR submitted: https://github.com/openshift/ovn-kubernetes/pull/1234"
    }
  ],
  "linked_prs": [
    "https://github.com/openshift/ovn-kubernetes/pull/1234"
  ],
  "progress": {
    "level": "ACTIVE",
    "label": "ACTIVE",
    "reason": "PR in progress (1 linked)",
    "days_since_update": 2,
    "days_since_last_comment": 4
  }
}
```

### Summary Format (--format summary)

```
JIRA Issue: OCPBUGS-74401
============================================================

Summary: ovn-ipsec-host creates duplicate openssl attribute
URL: https://redhat.atlassian.net/browse/OCPBUGS-74401
Status: Modified
Priority: Critical

Assignee: Jane Developer
Reporter: John Reporter

Components: Networking / cluster-network-operator
Labels: Regression
Fix Versions: 4.22

Created: 2026-01-20
Updated: 2026-02-10

Progress: ACTIVE - PR in progress (1 linked)
  Days since update: 2
  Days since last comment: 4

Linked PRs (1):
  - https://github.com/openshift/ovn-kubernetes/pull/1234

Recent Comments (1 of 5 total):
  [2026-02-08] Jane Developer:
    PR submitted: https://github.com/openshift/ovn-kubernetes/pull/1234
```

## Notes

- The script uses only Python standard library modules (no pip dependencies)
- All comments are returned in the JSON output; the summary format shows only the last 3
- PR links are extracted from comment bodies using pattern matching for GitHub PR URLs
- Progress classification uses configurable thresholds: 7 days for "recent", 14 days for "stale"
- The `--token` flag takes precedence over the `JIRA_API_TOKEN` environment variable

## See Also

- Related Command: `/ci:analyze-regression` - Uses this skill to check JIRA progress on triaged regressions
- Related Command: `/ci:check-if-jira-regression-is-ongoing` - Uses this skill for JIRA bug analysis
- Related Skill: `fetch-regression-details` - Fetches regression data that may link to JIRA bugs
- Related Skill: `triage-regression` - Creates triage records linking regressions to JIRA bugs
- JIRA REST API: https://developer.atlassian.com/server/jira/platform/rest-apis/

