1515 runs-on : ubuntu-latest
1616
1717 steps :
18+ # Step 1: Checkout repository
1819 - name : Checkout
1920 uses : actions/checkout@v4
2021
22+ # Step 2: Extract linked issues from PR
2123 - name : Extract linked issue(s) from PR
2224 id : extract-issues
2325 uses : actions/github-script@v7
2830 const prTitle = context.payload.pull_request.title || '';
2931 const prBody = context.payload.pull_request.body || '';
3032
31- // Regex patterns for issue references
33+ // Regex patterns to find linked issues
3234 const patterns = [
3335 /(?:close[sd]?|fix(?:e[sd])?|resolve[sd]?)\s+#(\d+)/gi,
3436 /#(\d+)/g
@@ -46,23 +48,26 @@ jobs:
4648 core.setOutput('issues', JSON.stringify(Array.from(issueNumbers)));
4749 core.setOutput('pr', prNumber.toString());
4850
51+ # Step 3: Sync issue metadata to PR
4952 - name : Sync Issue Metadata to PR
5053 if : steps.extract-issues.outputs.issues != '' && steps.extract-issues.outputs.issues != '[]'
5154 uses : actions/github-script@v7
5255 with :
5356 github-token : ${{ secrets.GITHUB_TOKEN }}
57+ issues : ${{ steps.extract-issues.outputs.issues }}
58+ pr : ${{ steps.extract-issues.outputs.pr }}
5459 script : |
55- // Safely parse outputs
56- const issuesOutput = '${{ steps.extract-issues.outputs.issues }}' || '[]';
60+ // Safely parse workflow outputs
61+ const issuesOutput = inputs.issues || '[]';
62+ const prNumber = parseInt(inputs.pr);
5763 let issueNumbers;
64+
5865 try {
5966 issueNumbers = JSON.parse(issuesOutput);
6067 } catch (err) {
6168 console.error('Failed to parse issues output:', issuesOutput);
6269 issueNumbers = [];
6370 }
64- const prNumber = parseInt('${{ steps.extract-issues.outputs.pr }}');
65-
6671
6772 if (issueNumbers.length === 0) {
6873 console.log("No linked issues found");
7176
7277 for (const issueNumber of issueNumbers) {
7378 try {
74- // Fetch issue
79+ // Fetch issue details
7580 const { data: issue } = await github.rest.issues.get({
7681 owner: context.repo.owner,
7782 repo: context.repo.repo,
0 commit comments