jira-creator
Create JIRA issues (stories, bugs, epics, spikes, tasks) quickly using standardized templates and optional AI-enhanced descriptions.
⚡ Quick Start (Under 30 Seconds)
🔧 1. Create your config file and enable autocomplete
Create a configuration file with your JIRA account and project details. This will include your personal access token, AI provider, API keys, JIRA URL, Project Key, Version, Component Name, Priority, and Board ID.
mkdir -p ~/.bashrc.d
cat <<EOF > ~/.bashrc.d/jira.sh
export JPAT="your_jira_personal_access_token"
export AI_PROVIDER=openai
export OPENAI_API_KEY=sk-...
export JIRA_URL="https://issues.redhat.com"
export PROJECT_KEY="AAP"
export AFFECTS_VERSION="aa-latest"
export COMPONENT_NAME="analytics-hcc-service"
export PRIORITY="Normal"
export JIRA_BOARD_ID=21125
# Enable autocomplete
eval "$(register-python-argcomplete rh-issue)"
EOF
source ~/.bashrc.d/jira.sh
🔗 2. Link the CLI wrapper
Make the wrapper script executable and link it to your local bin directory. This will allow you to run the CLI tool from anywhere in your terminal.
chmod +x jira_creator/rh-issue-wrapper.sh
sudo ln -s $(pwd)/jira_creator/rh-issue-wrapper.sh /usr/local/bin/rh-issue
🏃 3. Run it
Create your first JIRA issue with the rh-issue create command.
rh-issue create story "Improve onboarding experience"
🧪 Usage & Commands
All commands should be initiated with the rh-issue prefix.
🆕 Create Issues
Create JIRA issues directly from your terminal. Replace "Issue Type" with either "story", "bug", "epic", or "spike". Use --edit to open your default terminal text editor for longer descriptions, and --dry-run to print out the payload without creating the issue.
rh-issue create bug "Fix login crash"
rh-issue create story "Refactor onboarding flow"
rh-issue create epic "Unify frontend UI" --edit
rh-issue create spike "Evaluate GraphQL support" --dry-run
🔁 Change Issue Type
Change the type of an existing issue. Replace "Issue ID" with the ID of the issue you want to change, and "New Type" with the new issue type.
rh-issue change AAP-12345 story
🔀 Migrate Issue
Migrate an issue from one project to another. Replace "Issue ID" with the ID of the issue you want to migrate, and "New Project" with the key of the project you want to migrate the issue to.
rh-issue migrate AAP-54321 story
✏️ Edit Description
Edit the description of an existing issue. Replace "Issue ID" with the ID of the issue you want to edit. Use --no-ai to disable AI enhancements when editing the description.
rh-issue edit AAP-98765
rh-issue edit AAP-98765 --no-ai
🧍 Unassign Issue
Unassign an issue from a user. Replace "Issue ID" with the ID of the issue you want to unassign.
rh-issue unassign AAP-12345
📋 List Issues
List all issues in a project. Use --project to specify a project by its key, --component to filter by component, and --user to filter by assigned user.
rh-issue list
rh-issue list --project AAP --component api --user jdoe
🏷️ Set Priority
Set the priority of an issue. Replace "Issue ID" with the ID of the issue you want to set the priority for, and "Priority" with the desired priority level.
rh-issue set-priority AAP-123 High
📅 Sprint Management
Manage sprint assignments for issues. Replace "Issue ID" with the ID of the issue you want to manage, and "Sprint ID" with the ID of the sprint you want to assign or unassign.
rh-issue set-sprint AAP-456 1234
rh-issue remove-sprint AAP-456
rh-issue add-sprint AAP-456 "Sprint 33"
🚦 Set Status
Set the status of an issue. Replace "Issue ID" with the ID of the issue you want to set the status for, and "Status" with the desired status.
rh-issue set-status AAP-123 "In Progress"
🤖 AI Provider Support
You can plug in different AI providers by setting AI_PROVIDER. Each AI provider may require additional configuration.
✅ OpenAI
export AI_PROVIDER=openai
export OPENAI_API_KEY=sk-...
export OPENAI_MODEL=gpt-4 # Optional
🖥 GPT4All
pip install gpt4all
export AI_PROVIDER=gpt4all
🧪 InstructLab
export AI_PROVIDER=instructlab
export INSTRUCTLAB_URL=http://localhost:11434/api/generate
export INSTRUCTLAB_MODEL=instructlab
🧠 BART
export AI_PROVIDER=bart
export BART_URL=http://localhost:8000/bart
🧠 DeepSeek
export AI_PROVIDER=deepseek
export DEEPSEEK_URL=http://localhost:8000/deepseek
🪫 Noop
export AI_PROVIDER=noop
🛠 Dev Setup
pipenv install --dev
Testing & Linting
make test
make lint
make format # auto-fix formatting
⚙️ How It Works
- jira-creator loads field definitions from
.tmplfiles located under thetemplates/directory. - It uses
TemplateLoaderto generate Markdown descriptions. - Optionally, it applies AI cleanup to enhance the readability and structure of the descriptions.
- It sends the issue to JIRA via the REST API (or prints the payload for a dry-run).
📜 License
This project is licensed under the Apache License.
Metadata
Release files for jira-creator 0.0.31
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| jira_creator-0.0.31.tar.gz | 43.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| jira_creator-0.0.31-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 124.3 kB
Release files / jira_creator-0.0.31.tar.gz
| Download URL | jira_creator-0.0.31.tar.gz |
|---|---|
| Size | 43.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
19c1813676a8467b50c2a6183da444e6026a0e5156aa3f5f313e79d150d44cc2
|
|
BLAKE2b-256 checksum How to use checksums |
ddae241d65a5353a76d915a2efb897b9f5bcf7c1db52a45eb0f7b4f510440db5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.3
|
Release files / jira_creator-0.0.31-py3-none-any.whl
| Download URL | jira_creator-0.0.31-py3-none-any.whl |
|---|---|
| Size | 80.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
04794eaa05dbc91ae0103292890d5cac411d1532843c5b574f6d133c36710e97
|
|
BLAKE2b-256 checksum How to use checksums |
9e7a97d68cc2603d5c6cad44f1ceea8e0ee08c27f9847d6520bd695179e1515b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.3
|