name: "Apply issue labels to PR" on: pull_request_target: types: - opened jobs: label_on_pr: runs-on: ubuntu-latest permissions: contents: none issues: read pull-requests: write steps: - name: Apply labels from linked issue to PR uses: actions/github-script@v5 with: github-token: ${{ secrets.GITHUB_TOKEN }} script: | async function getLinkedIssues(owner, repo, prNumber) { const query = `query GetLinkedIssues($owner: String!, $repo: String!, $prNumber: Int!) { repository(owner: $owner, name: $repo) { pullRequest(number: $prNumber) { closingIssuesReferences(first: 10) { nodes { number labels(first: 10) { nodes { name } } } } } } }`; const variables = { owner: owner, repo: repo, prNumber: prNumber, }; const result = await github.graphql(query, variables); return result.repository.pullRequest.closingIssuesReferences.nodes; } const pr = context.payload.pull_request; const linkedIssues = await getLinkedIssues( context.repo.owner, context.repo.repo, pr.number ); const labelsToAdd = new Set(); for (const issue of linkedIssues) { if (issue.labels && issue.labels.nodes) { for (const label of issue.labels.nodes) { labelsToAdd.add(label.name); } } } if (labelsToAdd.size) { await github.rest.issues.addLabels({ owner: context.repo.owner, repo: context.repo.repo, issue_number: pr.number, labels: Array.from(labelsToAdd), }); }