laurigates / gha-issue-resolution

Analyzes GitHub issues and provides AI-generated suggestions using Gemini
1 stars 0 forks source link

Fix not creating pull requests #11

Open laurigates opened 6 hours ago

laurigates commented 6 hours ago

The script doesn't submit pull requests, this is from the action log

No specific issue event detected. Processing all open issues.
Already commented on issue #10. Skipping.
Already commented on issue #7. Skipping.
Already commented on issue #6. Skipping.
Already commented on issue #3. Skipping.
Finished Issue Resolution with Gemini Flash
laurigates commented 6 hours ago
## AI-generated suggestion

Here's a potential solution to this issue, generated by an AI assistant:

## Detailed Solution to Fix Pull Request Creation Failure

The problem stems from the lack of a "specific issue event detected" message in the GitHub Actions log. This indicates the workflow isn't correctly triggered by a relevant GitHub event, or the script isn't correctly identifying issues that need pull requests. The solution focuses on improving the workflow trigger and adding robust error handling and logging to the Python script.

1. Modifying issue_resolution.yml:

The current on section in issue_resolution.yml is likely too broad or incorrectly specified. We need to refine it to trigger only on specific events related to issue creation or updates. Here's a revised on section:

on:
  issues:
    types: [opened, reopened, edited] # Trigger on issue creation, reopening, or edits
  pull_request:
    types: [opened, reopened, synchronize] #Trigger on pull request creation or updates

jobs:
  resolve_issues:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.x' # Replace '3.x' with your specific Python version
      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install -r requirements.txt # Assuming dependencies are in requirements.txt
      - name: Run issue resolution script
        run: python src/gha_issue_resolution/__main__.py >> issue_resolution.log 2>&1
      - uses: actions/upload-artifact@v3
        with:
          name: issue_resolution_log
          path: issue_resolution.log

This revised on section triggers the workflow when an issue is opened, reopened, or edited, and also when a pull request is opened, reopened, or synchronized. This ensures that the workflow is activated when there's a change that might require a pull request. The addition of redirecting stdout and stderr to issue_resolution.log and uploading it as an artifact allows for easier debugging.

2. Enhancing src/gha_issue_resolution/__main__.py:

The Python script needs comprehensive logging and robust error handling. Here's an example incorporating the logging module and error handling for GitHub API calls:

import logging
import os
from github import Github  # Assuming PyGitHub is used

# Configure logging
logging.basicConfig(filename='resolution.log', level=logging.INFO, 
                    format='%(asctime)s - %(levelname)s - %(message)s')

def create_pull_request(github_instance, issue):
    try:
        # ...Your pull request creation logic here...
        pull_request = issue.create_pull_request(title=f"Resolve Issue #{issue.number}",
                                                 body=f"This pull request resolves issue #{issue.number}",
                                                 head="your_branch", # Replace with your branch
                                                 base="main") # Replace with your base branch
        logging.info(f"Pull request created successfully: {pull_request.html_url}")
        return True

    except Exception as e:
        logging.error(f"Error creating pull request for issue #{issue.number}: {e}")
        return False

if __name__ == "__main__":
    github_token = os.getenv("GITHUB_TOKEN") # Get GitHub token from environment variable
    if not github_token:
        logging.critical("GITHUB_TOKEN not found. Exiting.")
        exit(1)

    github = Github(github_token)
    try:
        # ...Your logic to fetch and process issues...

        # Iterate through issues and create pull requests
        for issue in issues_to_process:
          create_pull_request(github, issue)
    except Exception as e:
        logging.exception(f"A critical error occurred: {e}")
        exit(1)

This revised script adds logging statements at various points and includes a try...except block to catch exceptions during pull request creation. It also explicitly checks for the presence of the GITHUB_TOKEN environment variable, which is crucial for authenticating with the GitHub API.

3. Potential Side Effects and Considerations:

By implementing these changes, the workflow will be triggered by appropriate events, and the script will provide informative logs to help diagnose any problems during pull request creation. Remember to replace placeholder values like branch names with your actual values. Thorough local testing is strongly recommended before deploying the changes.

Please review this suggestion and let me know if you need any clarification or have any questions.
This is an AI-generated response and may require human validation and testing before implementation.