Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@
"name": "jira",
"source": "./plugins/jira",
"description": "A plugin to automate tasks with Jira",
"version": "0.9.1",
"version": "0.9.2",
"category": "productivity",
"keywords": [
"jira",
Expand Down
16 changes: 15 additions & 1 deletion docs/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -1490,7 +1490,7 @@ <h1>ai-helpers</h1>
{
"name": "jira",
"description": "A plugin to automate tasks with Jira",
"version": "0.9.1",
"version": "0.9.2",
"has_readme": true,
"commands": [
{
Expand Down Expand Up @@ -1533,6 +1533,14 @@ <h1>ai-helpers</h1>
"synopsis": "/jira:clone-from-github \u003cissue-number\u003e [issue-number...] [options]",
"body_html": "\u003cp\u003eThe \u003ccode\u003ejira:clone-from-github\u003c/code\u003e command clones one or more GitHub issues to Jira, preserving the original issue content and establishing a link between the GitHub and Jira issues. This command is useful for:\u003c/p\u003e\u003cp\u003e- Migrating GitHub issues to Jira for project tracking\u003cbr\u003e- Creating Jira tickets that track upstream GitHub issues\u003cbr\u003e- Maintaining synchronization between GitHub and Jira workflows\u003cbr\u003e- Bulk importing GitHub issues into Jira projects\u003c/p\u003e\u003cp\u003eThe command uses the \u003ca href=\"https://github.com/oceanc80/gh2jira\"\u003egh2jira utility\u003c/a\u003e to perform the cloning operation. Use \u003ccode\u003e/jira:setup-gh2jira\u003c/code\u003e to install and configure gh2jira if you haven&#x27;t already.\u003c/p\u003e"
},
{
"name": "create-jira-from-file",
"full_name": "create-jira-from-file - Create Jira issues from a markdown file",
"description": "Create Jira issues from a markdown file (works with any Jira, includes RH defaults)",
"description_html": "Create Jira issues from a markdown file (works with any Jira, includes RH defaults)",
"synopsis": "/jira:create-jira-from-file \u003cpath-to-markdown-file\u003e",
"body_html": "\u003cp\u003eCreate one or more Jira issues from a markdown file. Works with any Jira project and extracts all metadata from the file itself. Includes Red Hat-specific defaults (security level, project conventions) that are automatically omitted when not available.\u003c/p\u003e\u003cp\u003eRequired metadata (project key) and any optional fields (component, version, type, parent) must be specified in the markdown file itself. Issue type can be set explicitly or auto-detected from content.\u003c/p\u003e\u003cp\u003e### Required Metadata\u003c/p\u003e\u003cp\u003eEach issue must specify:\u003cbr\u003e- \u003ccode\u003e\u003cstrong\u003eProject:\u003c/strong\u003e &lt;project-key&gt;\u003c/code\u003e — REQUIRED\u003c/p\u003e\u003cp\u003e### Strongly Recommended Metadata\u003c/p\u003e\u003cp\u003e- \u003ccode\u003e\u003cstrong\u003eType:\u003c/strong\u003e &lt;issue-type&gt;\u003c/code\u003e — Story, Bug, Task, Epic, Feature, Initiative, or Sub-task. If omitted, the skill auto-detects from content patterns and confirms with the user when ambiguous.\u003c/p\u003e\u003cp\u003e### Optional Metadata\u003c/p\u003e\u003cp\u003e- \u003ccode\u003e\u003cstrong\u003eComponent:\u003c/strong\u003e &lt;component-name&gt;\u003c/code\u003e\u003cbr\u003e- \u003ccode\u003e\u003cstrong\u003eVersion:\u003c/strong\u003e &lt;version&gt;\u003c/code\u003e\u003cbr\u003e- \u003ccode\u003e\u003cstrong\u003eParent:\u003c/strong\u003e &lt;parent-issue-key&gt;\u003c/code\u003e\u003cbr\u003e- \u003ccode\u003e\u003cstrong\u003ePriority:\u003c/strong\u003e &lt;priority-name&gt;\u003c/code\u003e\u003cbr\u003e- \u003ccode\u003e\u003cstrong\u003eLabels:\u003c/strong\u003e &lt;label1&gt;, &lt;label2&gt;\u003c/code\u003e\u003c/p\u003e"
},
{
"name": "create-release-note",
"full_name": "jira:create-release-note",
Expand Down Expand Up @@ -1649,6 +1657,12 @@ <h1>ai-helpers</h1>
"description_html": "Create Jira issues — story, bug, epic, feature, initiative, task, or feature-request — with CNTRLPLANE, OCPBUGS, GCP, HyperShift, ARO, ROSA conventions and type-specific templates",
"meta": ""
},
{
"name": "create-jira-from-file",
"description": "Create Jira issues from a markdown file (single or batch). Works with any Jira project but includes Red Hat-specific defaults (security level, project conventions) that are automatically omitted when not available. Use whenever the user asks to create Jira from a file, create tickets/issues from markdown, batch-create Jira issues from a planning doc, or run /jira:create-jira-from-file. Extracts Project, Type, Component, Version, Parent, Priority, and Labels from the file.\n",
"description_html": "Create Jira issues from a markdown file (single or batch). Works with any Jira project but includes Red Hat-specific defaults (security level, project conventions) that are automatically omitted when not available. Use whenever the user asks to create Jira from a file, create tickets/issues from markdown, batch-create Jira issues from a planning doc, or run /jira:create-jira-from-file. Extracts Project, Type, Component, Version, Parent, Priority, and Labels from the file.",
"meta": ""
},
{
"name": "create-release-note",
"description": "Detailed implementation guide for generating bug fix release notes from Jira and GitHub PRs",
Expand Down
2 changes: 1 addition & 1 deletion plugins/jira/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "jira",
"description": "A plugin to automate tasks with Jira",
"version": "0.9.1",
"version": "0.9.2",
"author": {
"name": "github.com/openshift-eng"
}
Expand Down
27 changes: 26 additions & 1 deletion plugins/jira/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ Comprehensive Jira integration for Claude Code, providing AI-powered tools to an
- 📋 **Backlog Grooming** - Analyze new bugs and cards for grooming meetings
- 🏷️ **Activity Type Classification** - AI-powered classification of JIRA tickets into Sankey activity types, with single-issue and batch modes
- 🧪 **Test Generation** - Generate comprehensive test steps for JIRA issues by analyzing related PRs
- ✨ **Issue Creation** - Create well-formed stories, epics, features, tasks, bugs, and feature requests with guided workflows
- ✨ **Issue Creation** - Create well-formed stories, epics, features, tasks, bugs, and feature requests with guided workflows, or batch-create from markdown files
- 📝 **Release Note Generation** - Automatically generate bug fix release notes from Jira and linked GitHub PRs
- 🤖 **Automated Workflows** - From issue analysis to PR creation, fully automated
- 💬 **Smart Comment Analysis** - Extracts blockers, risks, and key insights from comments
Expand Down Expand Up @@ -224,6 +224,31 @@ See [commands/create.md](commands/create.md) for full documentation.

---

### `/jira:create-jira-from-file` - Create Issues from Markdown

Create one or more Jira issues from a markdown file. Project-agnostic: metadata (`**Project:**`, `**Type:**`, component, version, parent, etc.) comes from the file. Supports single-issue and batch modes with security scanning and parent hierarchy validation.

**Usage:**
```bash
# Single issue
/jira:create-jira-from-file feature-spec.md

# Batch (multiple issues in one file)
/jira:create-jira-from-file sprint-planning.md
```

**Key Features:**
- **File-driven metadata** — no project hard-coding; prompts when required fields are missing
- **Batch mode** — multiple type-prefixed or non-content H2 sections in one file
- **Security scanning** — blocks credential exposure before any create
- **Parent linking** — validates hierarchy for pre-existing and in-batch parents

**Examples:** [examples/create-jira-from-file-single-story.md](examples/create-jira-from-file-single-story.md), [examples/create-jira-from-file-batch.md](examples/create-jira-from-file-batch.md)

See [commands/create-jira-from-file.md](commands/create-jira-from-file.md) for full documentation.

---

### `/jira:create-release-note` - Generate Bug Fix Release Notes

Automatically generate bug fix release notes by analyzing Jira bug tickets and their linked GitHub pull requests. The command extracts Cause and Consequence from the bug description, analyzes PR content (description, commits, code changes, comments), synthesizes the information into a cohesive release note, and updates the Jira ticket.
Expand Down
122 changes: 122 additions & 0 deletions plugins/jira/commands/create-jira-from-file.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
---
name: create-jira-from-file
description: Create Jira issues from a markdown file (works with any Jira, includes RH defaults)
argument-hint: "<path-to-markdown-file>"
---

## Name

create-jira-from-file - Create Jira issues from a markdown file

## Synopsis

```bash
/jira:create-jira-from-file <path-to-markdown-file>
```

## Description

Create one or more Jira issues from a markdown file. Works with any Jira project and extracts all metadata from the file itself. Includes Red Hat-specific defaults (security level, project conventions) that are automatically omitted when not available.

Required metadata (project key) and any optional fields (component, version, type, parent) must be specified in the markdown file itself. Issue type can be set explicitly or auto-detected from content.

### Required Metadata

Each issue must specify:
- `**Project:** <project-key>` — REQUIRED

### Strongly Recommended Metadata

- `**Type:** <issue-type>` — Story, Bug, Task, Epic, Feature, Initiative, or Sub-task. If omitted, the skill auto-detects from content patterns and confirms with the user when ambiguous.

### Optional Metadata

- `**Component:** <component-name>`
- `**Version:** <version>`
- `**Parent:** <parent-issue-key>`
- `**Priority:** <priority-name>`
- `**Labels:** <label1>, <label2>`

## Examples

### Single Issue

```bash
/jira:create-jira-from-file feature-spec.md
```

### Batch Mode

```bash
/jira:create-jira-from-file sprint-planning.md
```

## Markdown Format

### Single Issue Example

```markdown
# Enable autoscaling for clusters

**Project:** PLATFORM
**Type:** Story
**Component:** Infrastructure
**Version:** 2.5

As a cluster admin, I want to configure autoscaling, so that I can handle traffic spikes.

## Acceptance Criteria
- [ ] Scales up when CPU > 80%
- [ ] Scales down when CPU < 30%
```

### Batch Mode Example

```markdown
## Story: Add user dashboard
**Project:** FRONTEND
**Component:** Console

As a developer, I want a dashboard to monitor applications.

### Acceptance Criteria
- [ ] Shows running pods

---

## Bug: API returns 500 error
**Project:** BACKEND
**Priority:** High

Description: API crashes on special characters.

Steps to Reproduce:
1. Create resource with special chars
2. Observe 500 error

Expected: 400 with validation error
```

## Features

- **Project-agnostic:** Works with any Jira project
- **Batch processing:** Create multiple issues from one file
- **Security scanning:** Detects and blocks credential exposure
- **Type auto-detection:** Infers issue type from content patterns
- **Parent linking:** Validates and links parent-child relationships
- **Error handling:** Reports missing components and versions with suggestions, logs permission errors, and continues batch processing on per-issue failures

## Notes

- The skill makes no assumptions about projects or components
- Metadata should be provided in the markdown file; missing required fields are prompted interactively
- Batch mode is auto-detected from file structure (multiple type-prefixed or non-content H2 headers; `---` alone is not enough)

## Arguments

- **path-to-markdown-file** (required): Path to the markdown file containing Jira issue definitions
- File must contain issue metadata fields (**Project**, **Type**, etc.)
- Can contain single issue or multiple issues (for batch processing)
- Example: `feature-spec.md`, `sprint-planning.md`

Invokes the `create-jira-from-file` skill.
133 changes: 133 additions & 0 deletions plugins/jira/examples/create-jira-from-file-batch.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
# Sprint 42 - Q3 Feature Development

**Project:** CNTRLPLANE

---

## Story: Add real-time metrics dashboard

**Type:** Story
**Component:** Console
**Priority:** High
**Labels:** ui, dashboard, metrics

### User Story

As a platform engineer, I want a real-time dashboard showing cluster health metrics, so that I can quickly identify and respond to performance issues.

### Acceptance Criteria

- [ ] Dashboard displays CPU, memory, disk, and network metrics
- [ ] Metrics update in real-time (refresh every 5 seconds)
- [ ] Historical data available for last 7 days
- [ ] Filtering by cluster, node pool, and namespace
- [ ] Exportable to CSV/JSON for reporting

### Technical Notes

Use Grafana embedded panels with Prometheus as data source. Dashboard should be accessible at `/console/metrics`.

---

## Bug: API returns 500 error on special characters in resource names

**Type:** Bug
**Component:** API Gateway
**Priority:** Critical
**Labels:** api, security

### Description

API server crashes when creating resources with special characters in names, returning HTTP 500 instead of validation error.

### Steps to Reproduce

1. Send POST request to `/api/v1/clusters` with payload:
```json
{
"name": "my-cluster<script>alert('xss')</script>",
"region": "us-east-1"
}
```
2. Observe 500 Internal Server Error response
3. Check API server logs — shows panic/crash

### Expected Behavior

API should return HTTP 400 with validation error:
```json
{
"error": "Invalid cluster name: contains illegal characters",
"allowed_pattern": "^[a-z0-9-]+$"
}
```

### Actual Behavior

Returns 500 error, crashes API server process, requires restart.

### Environment

- API version: v1.5.2
- Platform: OpenShift 4.15
- Affected endpoints: `/api/v1/clusters`, `/api/v1/nodepools`

---

## Task: Update API documentation for v2 endpoints

**Type:** Task
**Component:** Documentation
**Priority:** Medium
**Labels:** docs, api

### Description

Update API reference documentation to include new v2 endpoints introduced in Sprint 41.

### Definition of Done

- [ ] Swagger/OpenAPI spec updated with v2 endpoints
- [ ] Code examples added for all CRUD operations
- [ ] Authentication/authorization requirements documented
- [ ] Migration guide from v1 to v2 added
- [ ] Documentation published to developer portal

### Context

New v2 endpoints were added in CNTRLPLANE-500 but documentation was not updated. Customers are filing support tickets asking about v2 usage.

---

## Story: Implement cluster backup and restore

**Type:** Story
**Component:** Storage
**Priority:** High
**Version:** openshift-4.17
**Labels:** backup, disaster-recovery

### User Story

As a cluster admin, I want to backup and restore cluster state (including etcd, configs, and persistent volumes), so that I can recover from disasters or migrate clusters.

### Acceptance Criteria

- [ ] Automated daily backups of etcd snapshots
- [ ] Backup includes cluster configs, secrets, and RBAC policies
- [ ] Backup stored in object storage (S3-compatible)
- [ ] Restore operation validated in test environment
- [ ] Recovery Time Objective (RTO) < 1 hour
- [ ] Recovery Point Objective (RPO) < 24 hours

### Technical Notes

Use Velero for backup/restore orchestration. Integration with:
- AWS S3 for backup storage
- Encrypted backups with KMS keys
- Automated retention policy (keep 30 daily, 12 monthly)

### Dependencies

- CNTRLPLANE-200 — Object storage integration must be complete
- CNTRLPLANE-201 — Encryption key rotation implemented
Loading