[Resource]: LinkedIn Skills #1295
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Handle Resource Submission Commands | |
| on: | |
| issue_comment: | |
| types: [created] | |
| permissions: | |
| contents: read | |
| jobs: | |
| process-commands: | |
| # Maintainer comment (not a PR) on a resource-submission issue, containing a command. | |
| if: | | |
| github.event.issue.pull_request == null && | |
| contains(github.event.issue.labels.*.name, 'resource-submission') && | |
| (github.event.comment.author_association == 'OWNER' || github.event.comment.author_association == 'MEMBER' || github.event.comment.author_association == 'COLLABORATOR') && | |
| (contains(github.event.comment.body, '/approve') || contains(github.event.comment.body, '/reject') || contains(github.event.comment.body, '/request-changes')) | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| issues: write | |
| pull-requests: write | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v7 | |
| with: | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| fetch-depth: 0 | |
| - name: Set up Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: '3.12' | |
| - name: Install dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install pyyaml | |
| - name: Configure Git | |
| run: | | |
| git config user.name "github-actions[bot]" | |
| git config user.email "github-actions[bot]@users.noreply.github.com" | |
| - name: Parse issue and create PR | |
| id: create_pr | |
| if: contains(github.event.comment.body, '/approve') && contains(github.event.issue.labels.*.name, 'validation-passed') | |
| env: | |
| ISSUE_BODY: ${{ github.event.issue.body }} | |
| ISSUE_NUMBER: ${{ github.event.issue.number }} | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| PYTHONPATH: ${{ github.workspace }} | |
| run: | | |
| python -m resources.parse_issue_form > resource_data.json | |
| python -m resources.create_resource_pr --issue-number "$ISSUE_NUMBER" --resource-data resource_data.json | |
| - name: Comment on issue with results | |
| if: contains(github.event.comment.body, '/approve') && contains(github.event.issue.labels.*.name, 'validation-passed') | |
| uses: actions/github-script@v9 | |
| env: | |
| CREATE_PR_SUCCESS: ${{ steps.create_pr.outputs.success }} | |
| PR_URL: ${{ steps.create_pr.outputs.pr_url }} | |
| with: | |
| script: | | |
| const { owner, repo } = context.repo; | |
| const issue_number = context.issue.number; | |
| const success = (process.env.CREATE_PR_SUCCESS || '').toLowerCase() === 'true'; | |
| const pr_url = process.env.PR_URL || ''; | |
| let body = '## ✅ Resource Approved!\n\n'; | |
| if (success && pr_url) { | |
| body += `A pull request has been opened: ${pr_url}\n\nIt updates the CSV and regenerates the list.`; | |
| await github.rest.issues.addLabels({ owner, repo, issue_number, labels: ['approved', 'pr-created'] }); | |
| await github.rest.issues.update({ owner, repo, issue_number, state: 'closed', state_reason: 'completed' }); | |
| } else { | |
| body += '❌ There was an error creating the pull request. Check the workflow logs.'; | |
| await github.rest.issues.addLabels({ owner, repo, issue_number, labels: ['error-creating-pr'] }); | |
| } | |
| await github.rest.issues.createComment({ owner, repo, issue_number, body }); | |
| - name: Handle rejection | |
| if: contains(github.event.comment.body, '/reject') | |
| uses: actions/github-script@v9 | |
| with: | |
| script: | | |
| const { owner, repo } = context.repo; | |
| const issue_number = context.issue.number; | |
| const m = context.payload.comment.body.match(/\/reject\s+(.*)/s); | |
| const reason = m ? m[1].trim() : 'No reason provided'; | |
| await github.rest.issues.createComment({ owner, repo, issue_number, body: `## ❌ Submission Rejected\n\n**Reason:** ${reason}` }); | |
| await github.rest.issues.addLabels({ owner, repo, issue_number, labels: ['rejected'] }); | |
| await github.rest.issues.update({ owner, repo, issue_number, state: 'closed', state_reason: 'not_planned' }); | |
| - name: Handle request-changes | |
| if: contains(github.event.comment.body, '/request-changes') | |
| uses: actions/github-script@v9 | |
| with: | |
| script: | | |
| const { owner, repo } = context.repo; | |
| const issue_number = context.issue.number; | |
| const m = context.payload.comment.body.match(/\/request-changes\s+(.*)/s); | |
| const changes = m ? m[1].trim() : 'Please review the submission requirements.'; | |
| const maintainer = context.payload.comment.user.login; | |
| await github.rest.issues.createComment({ owner, repo, issue_number, body: `## 🔄 Changes Requested by @${maintainer}\n\n${changes}\n\nEdit your issue to address these; validation re-runs automatically.` }); | |
| await github.rest.issues.addLabels({ owner, repo, issue_number, labels: ['changes-requested'] }); | |
| - name: Cleanup | |
| if: always() | |
| run: rm -f resource_data.json |