# Generate PR or issue title using AI name: Title on: issue_comment: types: [created] pull_request: paths: - ".github/workflows/title.yml" - ".github/workflows/title.js" defaults: run: shell: bash permissions: {} jobs: title: runs-on: ubuntu-slim timeout-minutes: 5 # Trigger conditions: # - pull_request: skip fork PRs (no access to secrets) # - issue_comment: only maintainers can trigger via `/title` on PRs or issues if: > ( github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository ) || ( startsWith(github.event.comment.body, '/title') && contains(fromJSON('["OWNER", "MEMBER", "COLLABORATOR"]'), github.event.comment.author_association) ) permissions: pull-requests: write issues: write env: NUMBER: ${{ github.event.pull_request.number || github.event.issue.number }} REPO: ${{ github.repository }} COMMENT_ID: ${{ github.event.comment.id }} steps: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: persist-credentials: false sparse-checkout: .github/workflows/title.js sparse-checkout-cone-mode: false - name: Add reaction to comment if: github.event_name != 'pull_request' env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | gh api \ --method POST \ "/repos/$REPO/issues/comments/$COMMENT_ID/reactions" \ -f content='eyes' - name: Generate new title id: generate uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 env: ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} IS_PR: ${{ github.event_name == 'pull_request' || github.event.issue.pull_request != null }} with: retries: 3 script: | const script = require('./.github/workflows/title.js'); await script({ github, context, core }); - name: Update title if: github.event_name != 'pull_request' env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} NEW_TITLE: ${{ steps.generate.outputs.new_title }} run: | if [ -z "$NEW_TITLE" ]; then echo "Error: Generated title is empty" exit 1 fi gh issue edit "$NUMBER" --repo "$REPO" --title "$NEW_TITLE" - name: Post failure comment if: failure() && github.event_name != 'pull_request' env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} run: | gh issue comment "$NUMBER" --repo "$REPO" --body \ "> [!WARNING] > Failed to generate the title. See [workflow run]($RUN_URL) for details."