134 lines
7.4 KiB
Markdown
134 lines
7.4 KiB
Markdown
---
|
|
description: Analyze a JIRA issue and create a pull request to solve it.
|
|
---
|
|
|
|
## Name
|
|
jira:solve
|
|
|
|
## Synopsis
|
|
```
|
|
/jira:solve <jira-issue-id> [remote]
|
|
```
|
|
|
|
## Description
|
|
|
|
The `jira:solve` command analyzes a JIRA issue and creates a pull request to solve it.
|
|
|
|
This command takes a JIRA URL, fetches the issue description and requirements, analyzes the codebase to understand how to implement the solution, and creates a comprehensive pull request with the necessary changes.
|
|
|
|
**Usage Examples:**
|
|
|
|
1. **Solve a specific JIRA issue**:
|
|
```
|
|
/jira:solve OCPBUGS-12345 origin
|
|
```
|
|
|
|
## Implementation
|
|
|
|
- The command uses curl to fetch JIRA data via REST API: https://issues.redhat.com/rest/api/2/issue/{$1}
|
|
- Parses JSON response using jq or text processing
|
|
- Extracts key fields: summary, description, components, labels
|
|
- No authentication required for public Red Hat JIRA issues
|
|
- Creates a PR with the solution
|
|
|
|
### Process Flow
|
|
|
|
1. **Issue Analysis**: Parse JIRA URL and fetch issue details:
|
|
- Use curl to fetch JIRA issue data: curl -s "https://issues.redhat.com/rest/api/2/issue/{$1}"
|
|
- Parse JSON response to extract:
|
|
- Issue summary and description
|
|
- From within the description expect the following sections
|
|
- Required
|
|
- Context
|
|
- Acceptance criteria
|
|
- Optional
|
|
- Steps to reproduce (for bugs)
|
|
- Expected vs actual behavior
|
|
- Ask the user for further issue grooming if the requried sections are missing
|
|
|
|
2. **Codebase Analysis**: Search and analyze relevant code:
|
|
- Find related files and functions
|
|
- Understand current implementation
|
|
- Identify areas that need changes
|
|
- Use Grep and Glob tools to search for:
|
|
- Related function names mentioned in JIRA
|
|
- File patterns related to the component
|
|
- Similar existing implementations
|
|
- Test files that need updates
|
|
|
|
3. **Solution Implementation**:
|
|
- Think hard and create a detailed, step-by-step plan to implement this feature. Save it to spec-$1.md within the .work/jira/solve folder, for example .work/jira/solve/spec-OCPBUGS-12345.md
|
|
- Always ask the user to review the plan and give them the choice to modify it before start the implementation
|
|
- Implement the plan:
|
|
- Make necessary code changes using Edit/MultiEdit tools
|
|
- Follow existing code patterns and conventions
|
|
- Add or update tests as needed
|
|
- Update documentation if needed within the docs/ folder
|
|
- If the problem is too complex consider delegating to one of the SME agents.
|
|
- Ensure godoc comments are generated for any newly created public functions
|
|
- Use your best judgement if godoc comments are needed for private functions
|
|
- For example, a comment should not be generated for a simple function like func add(int a, b) int { return a + b}
|
|
- Create unit tests for any newly created functions
|
|
- After making code changes, verify the implementation based on the repository's tooling:
|
|
- **Check for Makefile**: Run `ls Makefile` to see if one exists
|
|
- **If Makefile exists**: Check available targets with `make help` or `grep '^[^#]*:' Makefile | head -20`
|
|
- **Run appropriate verification commands**:
|
|
- If `make lint-fix` exists: Run it to ensure imports are properly sorted and linting issues are fixed
|
|
- If `make verify`, `make build`, `make test` exist: Run these to ensure code builds and passes tests
|
|
- If no Makefile or make targets: Look for alternative commands:
|
|
- Go projects: `go fmt ./...`, `go vet ./...`, `go test ./...`, `go build ./...`
|
|
- Node.js: `npm test`, `npm run build`, `npm run lint`
|
|
- Python: `pytest`, `python -m unittest`, `pylint`, `black .`
|
|
- Other: Follow repository conventions in CI config files (.github/workflows/, .gitlab-ci.yml, etc.)
|
|
- **Never assume make targets exist** - always verify first
|
|
- **You must ensure verification passes** before proceeding to "Commit Creation"
|
|
|
|
4. **Commit Creation**:
|
|
- Create feature branch using the jira-key $1 as the branch name. For example: "git checkout -b fix-{jira-key}"
|
|
- Break commits into logical components based on the nature of the changes
|
|
- Each commit should honor https://www.conventionalcommits.org/en/v1.0.0/ and always include a commit message body articulating the "why"
|
|
- Use your judgment to organize commits in a way that makes them easy to review and understand
|
|
- Common logical groupings (use as guidance, not rigid rules):
|
|
- API changes: Changes in `api/` directory (types, CRDs)
|
|
- Example: `git commit -m"feat(api): Update HostedCluster API for X" -m"Add new fields to support Y functionality"`
|
|
- Vendor changes: Dependency updates in `vendor/` directory
|
|
- Example: `git commit -m"chore(vendor): Update dependencies for X" -m"Required to pick up bug fixes in upstream library Y"`
|
|
- Generated code: Auto-generated clients, informers, listers, and CRDs
|
|
- Example: `git commit -m"chore(generated): Regenerate clients and CRDs" -m"Regenerate after API changes to ensure client code is in sync"`
|
|
- CLI changes: User-facing command changes in `cmd/` directory
|
|
- Example: `git commit -m"feat(cli): Add support for X flag" -m"This allows users to configure Y behavior at cluster creation time"`
|
|
- Operator changes: Controller logic in `operator/` or `controllers/`
|
|
- Example: `git commit -m"feat(operator): Implement X controller logic" -m"Without this the controller won't reconcile when Y condition occurs"`
|
|
- Support/utilities: Shared code in `support/` directory
|
|
- Example: `git commit -m"refactor(support): Extract common X utility" -m"Consolidate duplicated logic from multiple controllers into shared helper"`
|
|
- Tests: Test additions or modifications
|
|
- Example: `git commit -m"test: Add tests for X functionality" -m"Ensure the new behavior is covered by unit tests to prevent regressions"`
|
|
- Documentation: Changes in `docs/` directory
|
|
- Example: `git commit -m"docs: Document X feature" -m"Help users understand how to configure and use the new capability"`
|
|
|
|
5. **PR Creation**:
|
|
- Push the branch with all commits against the remote specified in argument $2
|
|
- Create pull request with:
|
|
- Clear title referencing JIRA issue as a prefix. For example: "OCPBUGS-12345: ..."
|
|
- The PR description should satisfy the template within .github/PULL_REQUEST_TEMPLATE.md if the file exists
|
|
- The "🤖 Generated with Claude Code" sentence should include a reference to the slash command that triggered the execution, for example "via `/jira-solve OCPBUGS-12345 enxebre`"
|
|
- Always create as draft PR
|
|
- Always create the PR against the remote origin
|
|
- Use gh cli if you need to
|
|
|
|
6. **PR Description Review**:
|
|
- After creating the PR, display the PR URL and description to the user
|
|
- Ask the user: "Please review the PR description. Would you like me to update it? (yes/no)"
|
|
- If the user says yes or requests changes:
|
|
- Ask what changes they'd like to make
|
|
- Update the PR description using `gh pr edit {PR_NUMBER} --body "{new_description}"`
|
|
- Repeat this review step until the user is satisfied
|
|
- If the user says no or is satisfied, acknowledge and provide next steps
|
|
|
|
|
|
## Arguments:
|
|
- $1: The JIRA issue to solve (required)
|
|
- $2: The remote repository to push the branch. Defaults to "origin".
|
|
|
|
The command will provide progress updates and create a comprehensive solution addressing all requirements from the JIRA issue.
|