openhands-resolver.yml 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. name: Auto-Fix Tagged Issues with OpenHands
  2. on:
  3. issues:
  4. types: [labeled]
  5. permissions:
  6. contents: write
  7. pull-requests: write
  8. issues: write
  9. jobs:
  10. auto-fix:
  11. if: github.event.label.name == 'fix-me'
  12. runs-on: ubuntu-latest
  13. steps:
  14. - name: Checkout repository
  15. uses: actions/checkout@v3
  16. - name: Set up Python
  17. uses: actions/setup-python@v4
  18. with:
  19. python-version: '3.11'
  20. - name: Comment on issue with start message
  21. uses: actions/github-script@v6
  22. with:
  23. github-token: ${{secrets.GITHUB_TOKEN}}
  24. script: |
  25. github.rest.issues.createComment({
  26. issue_number: context.issue.number,
  27. owner: context.repo.owner,
  28. repo: context.repo.repo,
  29. body: `OpenHands started fixing the issue! You can monitor the progress [here](https://github.com/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}).`
  30. });
  31. - name: Install dependencies
  32. run: |
  33. python -m pip install --upgrade pip
  34. pip install openhands-resolver
  35. - name: Attempt to resolve issue
  36. env:
  37. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  38. LLM_MODEL: ${{ secrets.LLM_MODEL }}
  39. LLM_API_KEY: ${{ secrets.LLM_API_KEY }}
  40. LLM_BASE_URL: ${{ secrets.LLM_BASE_URL }}
  41. run: |
  42. python -m openhands_resolver.resolve_issues \
  43. --repo ${{ github.repository }} \
  44. --issue-numbers ${{ github.event.issue.number }}
  45. - name: Check resolution result
  46. id: check_result
  47. run: |
  48. if grep -q '"success":true' output/output.jsonl; then
  49. echo "RESOLUTION_SUCCESS=true" >> $GITHUB_OUTPUT
  50. else
  51. echo "RESOLUTION_SUCCESS=false" >> $GITHUB_OUTPUT
  52. fi
  53. - name: Create draft PR or push branch
  54. env:
  55. GITHUB_TOKEN: ${{ secrets.PAT_TOKEN }}
  56. GITHUB_USERNAME: ${{ secrets.PAT_USERNAME }}
  57. LLM_MODEL: ${{ secrets.LLM_MODEL }}
  58. LLM_API_KEY: ${{ secrets.LLM_API_KEY }}
  59. LLM_BASE_URL: ${{ secrets.LLM_BASE_URL }}
  60. run: |
  61. if [ "${{ steps.check_result.outputs.RESOLUTION_SUCCESS }}" == "true" ]; then
  62. python -m openhands_resolver.send_pull_request \
  63. --issue-number ${{ github.event.issue.number }} \
  64. --pr-type draft | tee pr_result.txt && \
  65. grep "draft created" pr_result.txt | sed 's/.*\///g' > pr_number.txt
  66. else
  67. python -m openhands_resolver.send_pull_request \
  68. --issue-number ${{ github.event.issue.number }} \
  69. --pr-type branch \
  70. --send-on-failure | tee branch_result.txt && \
  71. grep "Branch" branch_result.txt | sed 's/.*\///g; s/.expand=1//g' > branch_name.txt
  72. fi
  73. - name: Comment on issue
  74. uses: actions/github-script@v6
  75. with:
  76. github-token: ${{secrets.GITHUB_TOKEN}}
  77. script: |
  78. const fs = require('fs');
  79. const issueNumber = context.issue.number;
  80. const success = ${{ steps.check_result.outputs.RESOLUTION_SUCCESS }};
  81. if (success) {
  82. const prNumber = fs.readFileSync('pr_number.txt', 'utf8').trim();
  83. github.rest.issues.createComment({
  84. issue_number: issueNumber,
  85. owner: context.repo.owner,
  86. repo: context.repo.repo,
  87. body: `A potential fix has been generated and a draft PR #${prNumber} has been created. Please review the changes.`
  88. });
  89. } else {
  90. const branchName = fs.readFileSync('branch_name.txt', 'utf8').trim();
  91. github.rest.issues.createComment({
  92. issue_number: issueNumber,
  93. owner: context.repo.owner,
  94. repo: context.repo.repo,
  95. body: `An attempt was made to automatically fix this issue, but it was unsuccessful. A branch named '${branchName}' has been created with the attempted changes. You can view the branch [here](https://github.com/${context.repo.owner}/${context.repo.repo}/tree/${branchName}). Manual intervention may be required.`
  96. });
  97. }