@@ -100,88 +100,119 @@ jobs:
100100 uses : actions/github-script@v7
101101 with :
102102 script : |
103- let issueNumber, prNumber, headRef, baseRef, headSha, isPR = false;
104- let triggerText = '';
103+ let issueNumber, prNumber, headRef, baseRef, headSha
104+ let triggerText = ''
105+ let hasLinkedPR = false
106+ let isPR = false
105107
106108 if (context.eventName === 'pull_request_target') {
107109 // When a PR is created or updated
108- isPR = true;
109- issueNumber = context.payload.pull_request.number;
110- prNumber = context.payload.pull_request.number;
111- headRef = context.payload.pull_request.head.ref;
112- baseRef = context.payload.pull_request.base.ref;
113- headSha = context.payload.pull_request.head.sha;
114- triggerText = context.payload.pull_request.body;
110+ isPR = true
111+ issueNumber = context.payload.pull_request.number
112+ prNumber = context.payload.pull_request.number
113+ headRef = context.payload.pull_request.head.ref
114+ baseRef = context.payload.pull_request.base.ref
115+ headSha = context.payload.pull_request.head.sha
116+ triggerText = context.payload.pull_request.body
115117
116- console.log(`PR #${prNumber}: ${baseRef} <- ${headRef} (${headSha})`);
118+ console.log(`PR #${prNumber}: ${baseRef} <- ${headRef} (${headSha})`)
117119
118120 } else if (context.eventName === 'issues') {
119121 // When an Issue is created or assigned
120- isPR = false;
121- issueNumber = context.payload.issue.number;
122- triggerText = `${context.payload.issue.title} ${context.payload.issue.body}`;
122+ isPR = false
123+ issueNumber = context.payload.issue.number
124+ triggerText = `${context.payload.issue.title} ${context.payload.issue.body}`
123125
124- console.log(`Issue #${issueNumber} created`);
126+ console.log(`Issue #${issueNumber} created`)
125127
126128 } else if (context.eventName === 'issue_comment') {
127129 // Issue/PR comment
128- issueNumber = context.payload.issue.number;
129- triggerText = context.payload.comment.body;
130+ issueNumber = context.payload.issue.number
131+ triggerText = context.payload.comment.body
130132
131133 if (context.payload.issue.pull_request) {
132134 // Comment on a PR
133- isPR = true;
135+ isPR = true
134136 try {
135137 const pr = await github.rest.pulls.get({
136138 owner: context.repo.owner,
137139 repo: context.repo.repo,
138140 pull_number: issueNumber
139- });
140- prNumber = issueNumber;
141- headRef = pr.data.head.ref;
142- baseRef = pr.data.base.ref;
143- headSha = pr.data.head.sha;
141+ })
142+ prNumber = issueNumber
143+ headRef = pr.data.head.ref
144+ baseRef = pr.data.base.ref
145+ headSha = pr.data.head.sha
144146
145- console.log(`PR Comment #${prNumber}: ${baseRef} <- ${headRef}`);
147+ console.log(`PR Comment #${prNumber}: ${baseRef} <- ${headRef}`)
146148 } catch (error) {
147- console.error('Error fetching PR info:', error);
149+ console.error('Error fetching PR info:', error)
148150 // In case of error, treat as a regular Issue
149- isPR = false;
151+ isPR = false
150152 }
151153 } else {
152- // Regular Issue comment
153- isPR = false;
154- console.log(`Issue Comment #${issueNumber}`);
154+ // Regular Issue comment - check for existing linked PRs
155+ isPR = false
156+
157+ try {
158+ // Get timeline events to find linked pull requests
159+ const { data: timeline } = await github.rest.issues.listEventsForTimeline({
160+ owner: context.repo.owner,
161+ repo: context.repo.repo,
162+ issue_number: issueNumber,
163+ per_page: 100,
164+ headers: {
165+ accept: 'application/vnd.github.mockingbird-preview+json'
166+ }
167+ })
168+
169+ const linkedPRs = timeline.filter(event => event.event === 'connected')
170+ .map(event => event.source?.issue?.pull_request?.url)
171+ .filter(Boolean)
172+
173+ hasLinkedPR = linkedPRs.length > 0
174+ console.log(`Linked PRs: ${linkedPRs.join(', ') || 'None'}`)
175+ console.log(`Issue Comment #${issueNumber}, already has linked PR: ${hasLinkedPR}`)
176+
177+ } catch (error) {
178+ console.error('Error checking for linked PRs:', error)
179+ }
155180 }
156181
157182 } else if (context.eventName === 'pull_request_review_comment' || context.eventName === 'pull_request_review') {
158183 // PR review related
159- isPR = true;
160- issueNumber = context.payload.pull_request.number;
161- prNumber = context.payload.pull_request.number;
162- headRef = context.payload.pull_request.head.ref;
163- baseRef = context.payload.pull_request.base.ref;
164- headSha = context.payload.pull_request.head.sha;
184+ isPR = true
185+ issueNumber = context.payload.pull_request.number
186+ prNumber = context.payload.pull_request.number
187+ headRef = context.payload.pull_request.head.ref
188+ baseRef = context.payload.pull_request.base.ref
189+ headSha = context.payload.pull_request.head.sha
165190
166191 if (context.eventName === 'pull_request_review_comment') {
167- triggerText = context.payload.comment.body;
192+ triggerText = context.payload.comment.body
168193 } else {
169- triggerText = context.payload.review.body;
194+ triggerText = context.payload.review.body
170195 }
171196
172- console.log(`PR Review #${prNumber}: ${baseRef} <- ${headRef}`);
197+ console.log(`PR Review #${prNumber}: ${baseRef} <- ${headRef}`)
173198 }
174199
175200 // Set outputs
176- core.setOutput('issue-number', issueNumber);
177- core.setOutput('pr-number', prNumber || '');
178- core.setOutput('head-ref', headRef || '');
179- core.setOutput('base-ref', baseRef || '');
180- core.setOutput('head-sha', headSha || '');
181- core.setOutput('is-pr', isPR);
182- core.setOutput('trigger-text', triggerText);
201+ core.setOutput('issue-number', issueNumber)
202+ core.setOutput('pr-number', prNumber || '')
203+ core.setOutput('head-ref', headRef || '')
204+ core.setOutput('base-ref', baseRef || '')
205+ core.setOutput('head-sha', headSha || '')
206+ core.setOutput('is-pr', isPR)
207+ core.setOutput('trigger-text', triggerText)
208+ core.setOutput('has-linked-pr', hasLinkedPR)
183209
184- console.log(`Final Context: Issue #${issueNumber}, isPR: ${isPR}, Event: ${context.eventName}`);
210+ console.log(`Final Context:`)
211+ console.log(`Event: ${context.eventName}`)
212+ console.log(`Issue #${issueNumber}`)
213+ console.log(`isPR: ${isPR}`)
214+ console.log(`Trigger Text: ${triggerText}`)
215+ console.log(`Already has linked PR: ${hasLinkedPR}`)
185216
186217 - name : Validate Environment
187218 run : |
@@ -196,6 +227,7 @@ jobs:
196227 echo "Head Ref: ${{ steps.context-info.outputs.head-ref }}"
197228 echo "Base Ref: ${{ steps.context-info.outputs.base-ref }}"
198229 echo "Head SHA: ${{ steps.context-info.outputs.head-sha }}"
230+ echo "Has Linked PR: ${{ steps.context-info.outputs.has-linked-pr }}"
199231 echo "=================================="
200232
201233 # Check for secrets
0 commit comments