Skip to content

Testing-Add You will never wake up if you do not fall a sleep at the end of README #4

Testing-Add You will never wake up if you do not fall a sleep at the end of README

Testing-Add You will never wake up if you do not fall a sleep at the end of README #4

name: Auto-Fix Tagged Issues with OpenHands
on:
workflow_call:
inputs:
issue_number:
required: true
type: number
secrets:
LLM_MODELS:
required: true
LLM_API_KEY:
required: true
LLM_BASE_URL:
required: false
PAT_TOKEN:
required: true
PAT_USERNAME:
required: true
issues:
types: [labeled]
permissions:
contents: write
pull-requests: write
issues: write
jobs:
auto-fix:
if: github.event_name == 'workflow_call' || github.event.label.name == 'commit-url-test'
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Check required environment variables
env:
LLM_MODELS: ${{ secrets.LLM_MODELS }}
LLM_API_KEY: ${{ secrets.LLM_API_KEY }}
LLM_BASE_URL: ${{ secrets.LLM_BASE_URL }}
PAT_TOKEN: ${{ secrets.PAT_TOKEN }}
PAT_USERNAME: ${{ secrets.PAT_USERNAME }}
run: |
required_vars=("LLM_MODELS" "LLM_API_KEY" "PAT_TOKEN" "PAT_USERNAME")
for var in "${required_vars[@]}"; do
if [ -z "${!var}" ]; then
echo "Error: Required environment variable $var is not set."
exit 1
fi
done
- name: Set issue number
run: echo "ISSUE_NUMBER=${{ github.event.issue.number || inputs.issue_number }}" >> $GITHUB_ENV
- name: Comment on issue with start message
uses: actions/github-script@v7
with:
github-token: ${{secrets.GITHUB_TOKEN}}
script: |
github.rest.issues.createComment({
issue_number: ${{ env.ISSUE_NUMBER }},
owner: context.repo.owner,
repo: context.repo.repo,
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}).`
});
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install git+https://github.com/JiseungHong/openhands-resolver.git
pip install firebase-admin
- name: Attempt to resolve issues and Send the Resolver Output to firebase.
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
LLM_MODELS: ${{ secrets.LLM_MODELS }}
LLM_API_KEY: ${{ secrets.LLM_API_KEY }}
LLM_BASE_URL: ${{ secrets.LLM_BASE_URL }}
PYTHONPATH: ""
FIREBASE_CONFIG: ${{ secrets.FIREBASE_CONFIG }}
run: |
cd /tmp && python -m openhands_resolver.resolve_issues \
--repo ${{ github.repository }} \
--issue-numbers ${{ env.ISSUE_NUMBER }}
- name: Retrieve Last Commit Hash and Store in Firebase
env:
FIREBASE_CONFIG: ${{ secrets.FIREBASE_CONFIG }}
run: |
LAST_COMMIT_HASH=$(git log -1 --pretty=format:'%H')
echo "Last Commit Hash: $LAST_COMMIT_HASH"
echo "::set-output name=last_commit_hash::$LAST_COMMIT_HASH"
COMMIT_URL="https://github.com/${{ github.repository }}/commit/$LAST_COMMIT_HASH"
echo "Commit URL: $COMMIT_URL"
python3 - <<EOF
import firebase_admin
from firebase_admin import credentials, db
# Initialize Firebase
cred = credentials.Certificate("${{ env.FIREBASE_CONFIG }}")
firebase_admin.initialize_app(cred, {
'databaseURL': 'https://your-database-name.firebaseio.com/'
})
# Store commit URL
ref = db.reference('commit_urls')
ref.push({
'commit_url': "$COMMIT_URL"
})
EOF
- name: Check resolution results
id: check_results
run: |
if cd /tmp && grep -q '"success":true' output/output1.jsonl; then
echo "MODEL1_RESOLUTION_SUCCESS=true" >> $GITHUB_ENV
else
echo "MODEL1_RESOLUTION_SUCCESS=false" >> $GITHUB_ENV
fi
if cd /tmp && grep -q '"success":true' output/output2.jsonl; then
echo "MODEL2_RESOLUTION_SUCCESS=true" >> $GITHUB_ENV
else
echo "MODEL2_RESOLUTION_SUCCESS=false" >> $GITHUB_ENV
fi
- name: Post webpage link to GitHub issue comment
uses: actions/github-script@v7
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const issueNumber = ${{ env.ISSUE_NUMBER }};
const repo = context.repo.repo
const owner = context.repo.owner
const firebaseWebpageURL = `https://pr-arena.web.app/${owner}-${repo}-${issueNumber}`;
github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issueNumber,
body: `⚔️PR-Arena is now open⚔️! You can view the proposed fixes and make a decision at [this link](${firebaseWebpageURL}).`
});
- name: Wait for user's decision and save it to the GitHub environment
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
LLM_MODELS: ${{ secrets.LLM_MODELS }}
LLM_API_KEY: ${{ secrets.LLM_API_KEY }}
LLM_BASE_URL: ${{ secrets.LLM_BASE_URL }}
GITHUB_USERNAME: ${{ secrets.PAT_USERNAME }}
PYTHONPATH: ""
FIREBASE_CONFIG: ${{ secrets.FIREBASE_CONFIG }}
run: |
cd /tmp && python -m openhands_resolver.listen_for_decision \
--repo ${{ github.repository }} \
--issue-number ${{ env.ISSUE_NUMBER }}
- name: Create Pull Request for the selected branch
env:
GITHUB_TOKEN: ${{ secrets.PAT_TOKEN }}
LLM_MODELS: ${{ secrets.LLM_MODELS }}
LLM_API_KEY: ${{ secrets.LLM_API_KEY }}
LLM_BASE_URL: ${{ secrets.LLM_BASE_URL }}
PYTHONPATH: ""
SELECTED_MODEL: ${{ env.SELECTED }}
run: |
cd /tmp && python -m openhands_resolver.send_pull_request \
--issue-number ${{ env.ISSUE_NUMBER }} \
--model-number $SELECTED_MODEL \
--pr-type draft | tee pr_result${SELECTED_MODEL}.txt && \
grep "draft created" pr_result${SELECTED_MODEL}.txt | sed 's/.*\///g' > pr_number.txt
- name: Comment on issue
uses: actions/github-script@v7
with:
github-token: ${{secrets.GITHUB_TOKEN}}
script: |
const fs = require('fs');
const issueNumber = ${{ env.ISSUE_NUMBER }};
let prNumber = '';
let branchName = '';
try {
prNumber = fs.readFileSync('/tmp/pr_number.txt', 'utf8').trim();
} catch (error) {
console.error('Error reading file:', error);
}
github.rest.issues.createComment({
issue_number: issueNumber,
owner: context.repo.owner,
repo: context.repo.repo,
body: `A potential fix has been generated and a draft PR #${prNumber} has been created. Please review the changes.`
});