Created
April 23, 2025 12:56
-
-
Save svandragt/7e02fcdc6f5eddd73417c41761e2ce4a to your computer and use it in GitHub Desktop.
JIRA Ticket Checker Script
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# /// script | |
# requires-python = ">=3.10" | |
# dependencies = [ | |
# "pyperclip", | |
# "requests", | |
# ] | |
# /// | |
import os | |
import requests | |
import subprocess | |
import re | |
import pyperclip | |
# Configuration from environment variables | |
JIRA_URL = os.getenv('JIRA_URL') | |
JIRA_EMAIL = os.getenv('JIRA_EMAIL') | |
JIRA_API_TOKEN = os.getenv('JIRA_API_TOKEN') | |
JIRA_QUERY = os.getenv('JIRA_QUERY') | |
def get_jira_tickets(): | |
# Set up the request | |
auth = (JIRA_EMAIL, JIRA_API_TOKEN) | |
headers = { | |
"Content-Type": "application/json" | |
} | |
params = { | |
'jql': JIRA_QUERY, | |
'fields': 'key', # Only fetch the ticket key | |
'maxResults': 100 # Adjust as needed | |
} | |
# Make the request to JIRA | |
response = requests.get(JIRA_URL, headers=headers, auth=auth, params=params) | |
response.raise_for_status() # Raise an error for bad responses | |
# Extract ticket keys | |
tickets = [issue['key'] for issue in response.json().get('issues', [])] | |
return tickets | |
def get_current_branch(): | |
# Get the current Git branch name | |
branch_name = subprocess.check_output(['git', 'rev-parse', '--abbrev-ref', 'HEAD']).strip().decode('utf-8') | |
return branch_name | |
def get_latest_commit_message(): | |
# Get the latest Git commit message | |
commit_message = subprocess.check_output(['git', 'log', '-1', '--pretty=%B']).strip().decode('utf-8') | |
return commit_message | |
def find_matching_tickets(tickets, branch_name, commit_message): | |
# Regex to match JIRA ticket format | |
ticket_pattern = re.compile(r'[A-Z]+-\d+') | |
# Find matches in branch name and commit message | |
matches = set() | |
for ticket in tickets: | |
if ticket in branch_name or ticket in commit_message: | |
matches.add(ticket) | |
return matches | |
def main(): | |
# Check if environment variables are set | |
if not all([JIRA_URL, JIRA_EMAIL, JIRA_API_TOKEN]): | |
print("Please set the JIRA_URL, JIRA_EMAIL, and JIRA_API_TOKEN environment variables.") | |
return | |
# Get JIRA tickets assigned to the user | |
tickets = get_jira_tickets() | |
# Get current branch name and latest commit message | |
branch_name = get_current_branch() | |
commit_message = get_latest_commit_message() | |
# Find matching tickets | |
matching_tickets = find_matching_tickets(tickets, branch_name, commit_message) | |
# Copy matching tickets to clipboard | |
if matching_tickets: | |
ticket_list = "\n".join(matching_tickets) | |
pyperclip.copy(ticket_list) | |
print(f"Copied to clipboard:\n{ticket_list}") | |
else: | |
print("No matching tickets found.") | |
if __name__ == "__main__": | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Requires only UV https://docs.astral.sh/uv/
uv run jira-ticket.py