name: Approve Merged Contributor on: pull_request_target: types: [closed] jobs: approve: if: ${{ github.event.pull_request.merged == true }} runs-on: ubuntu-latest permissions: contents: read steps: - name: Checkout uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 with: ref: ${{ github.event.repository.default_branch }} persist-credentials: false - name: Add merged contributor to approved list id: update uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9 with: github-token: ${{ secrets.KANGAL_GITHUB_TOKEN }} script: | const fs = require('fs'); const prAuthor = context.payload.pull_request.user.login; const approvedFile = '.github/APPROVED_CONTRIBUTORS'; if (prAuthor.endsWith('[bot]') || prAuthor === 'dependabot[bot]') { console.log(`Skipping bot: ${prAuthor}`); core.setOutput('status', 'skipped'); return; } let content = fs.readFileSync(approvedFile, 'utf8'); const approvedList = content .split('\n') .map(line => line.trim().toLowerCase()) .filter(line => line && !line.startsWith('#')); if (approvedList.includes(prAuthor.toLowerCase())) { console.log(`${prAuthor} is already approved`); core.setOutput('status', 'already'); return; } content = content.trimEnd() + '\n' + prAuthor + '\n'; fs.writeFileSync(approvedFile, content); console.log(`Added ${prAuthor} to approved contributors`); core.setOutput('status', 'added'); - name: Commit and push if: steps.update.outputs.status == 'added' env: KANGAL_GITHUB_TOKEN: ${{ secrets.KANGAL_GITHUB_TOKEN }} run: | git config user.name "kangal-bot" git config user.email "285672167+kangal-bot@users.noreply.github.com" git add .github/APPROVED_CONTRIBUTORS git diff --staged --quiet || git commit -m "chore: approve merged contributor ${{ github.event.pull_request.user.login }}" git push "https://x-access-token:${KANGAL_GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git" HEAD:${{ github.event.repository.default_branch }}