Skip to content

[Resource]: LinkedIn Skills #1295

[Resource]: LinkedIn Skills

[Resource]: LinkedIn Skills #1295

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