name: PR Style Bot on: workflow_dispatch: permissions: contents: write pull-requests: write jobs: run-style-bot: if: > contains(github.event.comment.body, '@bot /style') && github.event.issue.pull_request != null runs-on: ubuntu-latest steps: - name: Extract PR details id: pr_info uses: actions/github-script@v6 with: script: | const prNumber = context.payload.issue.number; const { data: pr } = await github.rest.pulls.get({ owner: context.repo.owner, repo: context.repo.repo, pull_number: prNumber }); // We capture both the branch ref and the "full_name" of the head repo // so that we can check out the correct repository & branch (including forks). core.setOutput("prNumber", prNumber); core.setOutput("headRef", pr.head.ref); core.setOutput("headRepoFullName", pr.head.repo.full_name); - name: Check out PR branch uses: actions/checkout@v3 env: HEADREPOFULLNAME: ${{ steps.pr_info.outputs.headRepoFullName }} HEADREF: ${{ steps.pr_info.outputs.headRef }} with: # Instead of checking out the base repo, use the contributor's repo name repository: ${{ env.HEADREPOFULLNAME }} ref: ${{ env.HEADREF }} # You may need fetch-depth: 0 for being able to push fetch-depth: 0 token: ${{ secrets.GITHUB_TOKEN }} - name: Debug env: HEADREPOFULLNAME: ${{ steps.pr_info.outputs.headRepoFullName }} HEADREF: ${{ steps.pr_info.outputs.headRef }} PRNUMBER: ${{ steps.pr_info.outputs.prNumber }} run: | echo "PR number: ${{ env.PRNUMBER }}" echo "Head Ref: ${{ env.HEADREF }}" echo "Head Repo Full Name: ${{ env.HEADREPOFULLNAME }}" - name: Set up Python uses: actions/setup-python@v4 - name: Install dependencies run: | pip install ruff pre-commit - name: Download Makefile from main branch run: | curl -o main_Makefile https://raw.githubusercontent.com/huggingface/trl/main/Makefile - name: Compare Makefiles run: | if ! diff -q main_Makefile Makefile; then echo "Error: The Makefile has changed. Please ensure it matches the main branch." exit 1 fi echo "No changes in Makefile. Proceeding..." rm -rf main_Makefile - name: Run make style and make quality run: | make precommit || true - name: Commit and push changes id: commit_and_push env: HEADREPOFULLNAME: ${{ steps.pr_info.outputs.headRepoFullName }} HEADREF: ${{ steps.pr_info.outputs.headRef }} PRNUMBER: ${{ steps.pr_info.outputs.prNumber }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | echo "HEADREPOFULLNAME: ${{ env.HEADREPOFULLNAME }}, HEADREF: ${{ env.HEADREF }}" # Configure git with the Actions bot user git config user.name "github-actions[bot]" git config user.email "github-actions[bot]@users.noreply.github.com" # Make sure your 'origin' remote is set to the contributor's fork git remote set-url origin "https://x-access-token:${GITHUB_TOKEN}@github.com/${{ env.HEADREPOFULLNAME }}.git" # If there are changes after running style/quality, commit them if [ -n "$(git status --porcelain)" ]; then git add . git commit -m "Apply style fixes" # Push to the original contributor's forked branch git push origin HEAD:${{ env.HEADREF }} echo "changes_pushed=true" >> $GITHUB_OUTPUT else echo "No changes to commit." echo "changes_pushed=false" >> $GITHUB_OUTPUT fi - name: Comment on PR with workflow run link if: steps.commit_and_push.outputs.changes_pushed == 'true' uses: actions/github-script@v6 with: script: | const prNumber = parseInt(process.env.prNumber, 10); const runUrl = `${process.env.GITHUB_SERVER_URL}/${process.env.GITHUB_REPOSITORY}/actions/runs/${process.env.GITHUB_RUN_ID}` await github.rest.issues.createComment({ owner: context.repo.owner, repo: context.repo.repo, issue_number: prNumber, body: `Style fixes have been applied. [View the workflow run here](${runUrl}).` }); env: prNumber: ${{ steps.pr_info.outputs.prNumber }}